例如,我有
char* c=(char *)malloc(100*sizeof(char));
printf("0x%x,c);
printf("0x%x,&c);
c
这将显示和的不同值&c
。
但是,如果我有以下情况:
char d[100];
printf("0x%x,d);
printf("0x%x,&d);
这表明d
和的值&d
是相同的。
第一个代码如何给我不同的结果c
和&c
?
在许多情况下,数组会衰减为指向其第一个元素的指针,包括在函数调用中的使用。当它是一元(地址)运算符的操作数时,它不会衰减。&
这意味着d
并&d
在您的示例中产生相同的地址,但具有不同的类型。 char *
和char (*)[100]
,分别在您的情况下。
相反,c
是一个指针。当你用 获取它的地址时&
,你得到的是指针变量的地址,而不是c
直接使用,它给你它指向的地址。 c
是一个char *
,并且&c
是一个char **
。
编者注:%p
用于打印指针类型。 %x
用于unsigned int
, 并且unsigned int
可能与指针的大小不同。更正后的代码可能如下所示:
printf("%p\n", (void *)c);