例如,我有
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);