*(&char_array)在C中的含义是什么?

pho*_*ong 1 c pointers

我有这个C程序:

#include <stdio.h>

int main(){

char char_ar[] = "hello world.";
char* char_ptr = char_ar;

/*Same thing*/
printf("*Same thing:\n");
printf("%x : %c\n", &*char_ptr, *char_ptr);
printf("%x : %c\n", &*char_ar, *char_ar);

/*Not same thing*/
printf("*Not the same thing:\n");
printf("%x : %c\n", char_ptr, *char_ptr);
printf("%x : %c\n", &char_ar, *(&char_ar));

getchar();
}
Run Code Online (Sandbox Code Playgroud)

最后一个printf不会打印出"mem_address:h".

而是打印出"mem_address:some_random_char"

该行中的 *(&char_array)是如何输出随机字符的?

hac*_*cks 6

*(&char_array)相当于char_array.在这种情况下*,&使对方的效果无效.

C11-§6.5.3.2/ 3:

一元运算&符产生其操作数的地址.如果操作数的类型为"type",则结果的类型为"指向类型的指针".如果操作数是一元运算*符的结果,则不会对该运算符和&运算符进行求值,结果就好像两者都被省略,除了对运算符的约束仍然适用且结果不是左值.[...]

请注意,您应该使用%p而不是%x指针数据类型.