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

hen*_*yao 1 c pointers

例如,我有

char* c=(char *)malloc(100*sizeof(char));
printf("0x%x,c);
printf("0x%x,&c);
Run Code Online (Sandbox Code Playgroud)

这将显示不同的价值c&c.

但是,如果我有以下内容:

char d[100];
printf("0x%x,d);
printf("0x%x,&d);
Run Code Online (Sandbox Code Playgroud)

这表明价值d&d是一样的.

如何产生的第一个代码让我对不同的结果c&c

Car*_*rum 6

数组在许多上下文中衰减为指向其第一个元素的指针,包括它在函数调用中的使用.这,当它是一元的操作数衰减&(地址)的运营商.这意味着,d&d在你的榜样产生相同的地址,但有不同的类型. char *并且char (*)[100],分别在你的情况下.

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

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

printf("%p\n", (void *)c);
Run Code Online (Sandbox Code Playgroud)