1

例如,我有

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

4

1 回答 1

6

在许多情况下,数组会衰减为指向其第一个元素的指针,包括在函数调用中的使用。当它是一元(地址)运算符的操作数时,它不会衰减。&这意味着d&d在您的示例中产生相同的地址,但具有不同的类型。 char *char (*)[100],分别在您的情况下。

相反,c是一个指针。当你用 获取它的地址时&,你得到的是指针变量的地址,而不是c直接使用,它给你它指向的地址。 c是一个char *,并且&c是一个char **

编者注:%p用于打印指针类型。 %x用于unsigned int, 并且unsigned int可能与指针的大小不同。更正后的代码可能如下所示:

printf("%p\n", (void *)c);
于 2013-07-15T17:34:43.823 回答