首页 > 解决方案 > C中指针的字节宽度

问题描述

我是动态和静态分配的新手,我注意到一个奇怪的行为。我制作了以下代码片段:

#include ...
int main(void){

    int i ;
    printf(" using amesand :%p\n", &i);
    
    int *j = malloc(sizeof(*j)) ;
    printf(" using malloc :%p\n", j)

}

然后编译并生成:

 using amesand :0x7ffc0128695c
 using malloc :0x6686b0

我在某处读过

所有指针在同一实现中具有相同的宽度。

有人可以解释为什么 malloc() 返回的指针只有3 个字节长吗?

标签: cpointersmalloc

解决方案


使用运算符来确定指针的宽度sizeof,例如:

int i;
printf(" using amesand :%zu\n", sizeof( &i ));

int *j = malloc(sizeof(*j));
printf(" using malloc :%zu\n", sizeof( j) );

至于此输出,地址可以具有不同的值,具体取决于分配相应内存的位置。并且使用转换说明符%p通常会生成(如您的情况)跳过前导零的输出。


推荐阅读