繁体   English   中英

*(&char_array)在C中是什么意思?

[英]what does *(&char_array) mean in C?

我有这个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();
}

最后一个printf不会打印出“ mem_address:h”。

而是打印出“ mem_address:some_random_char”

该行中的*(&char_array)会做什么,以便输出随机字符?

*(&char_array)等同于char_array 在这种情况下, *&使彼此的效果无效。

C11-§6.5.3.2/ 3:

一元&运算符产生其操作数的地址。 如果操作数的类型为“类型”,则结果的类型为“类型的指针”。 如果操作数是一元*运算符的结果,则不会对该运算符和&运算符求值,并且结果似乎都被省略了,除了运算符上的约束仍然适用并且结果不是左值。 [...]

请注意,对于指针数据类型,应使用%p而不是%x

printf("%x : %c\n", char_ptr, *char_ptr);

打印char_ptr指向的字符,应为'h'。

printf("%x : %c\n", &char_ar, *(&char_ar));

打印char_ptr地址的第一个字节,将其解释为字符,该字符应显示为完全随机且不可预测的字符。

haccks是绝对正确的, *(&char_ar)等同于char_ar ,但我还想补充一点, *(&char_ar)&*char_ar

添加这两行以查看区别:

// This is a char**
printf("%p, sizeof(&*char_ar): %d\n", &*char_ar, sizeof(&*char_ar));

// This is a char*[]
printf("%p, sizeof(*(&char_ar)): %d\n", *(&char_ar), sizeof(*(&char_ar)));

请参阅此处以获取其他说明

本来可以作为注释发布的,但是对于代码示例来说却有点过多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM