例如,我有
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?
数组在许多上下文中衰减为指向其第一个元素的指针,包括它在函数调用中的使用.这不,当它是一元的操作数衰减&(地址)的运营商.这意味着,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)