printf("%lu \n", sizeof(*"327"));
Run Code Online (Sandbox Code Playgroud)
我一直认为指针的大小在64位系统上是8个字节但是这个调用一直在返回1.有人可以提供解释吗?
hac*_*cks 61
放在*字符串文字之前将取消引用文字(因为字符串文字是字符数组,并将衰减到指向其在此上下文中的第一个元素).该声明
printf("%zu \n", sizeof(*"327"));
Run Code Online (Sandbox Code Playgroud)
相当于
printf("%zu \n", sizeof("327"[0]));
Run Code Online (Sandbox Code Playgroud)
"327"[0]将给出字符串文字的第一个元素"327",即字符'3'."327"腐烂之后的类型,在char *解除引用之后,它将给出一个类型的值,char最终sizeof(char)是1.
Mar*_*evi 18
该声明:
printf("%lu \n", sizeof(*"327"));
Run Code Online (Sandbox Code Playgroud)
实际打印a的大小char,因为使用*解引用字符串的第一个字符327.将其更改为:
char* str = "327";
printf("%zu \n", sizeof(str));
Run Code Online (Sandbox Code Playgroud)
请注意,我们需要在%zu这里使用,而不是%lu因为我们正在打印一个size_t值.