malloc()的返回值和数组名称之间的区别是什么

时间:2013-07-15 17:32:02

标签: c pointers

例如,我有

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提供不同的结果?

1 个答案:

答案 0 :(得分:6)

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

,分别为char *char (*)[100]

相反,c是一个指针。当您使用&获取其地址时,您将获得指针变量的地址,而不是直接使用c,这将为您提供指向的地址。 cchar *&cchar **

编辑说明:使用%p打印指针类型。 %x适用于unsigned intunsigned int可能与指针的大小不同。更正的代码可能如下所示:

printf("%p\n", (void *)c);