我有这个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)是如何输出随机字符的?
*(&char_array)相当于char_array.在这种情况下*,&使对方的效果无效.
C11-§6.5.3.2/ 3:
一元运算
&符产生其操作数的地址.如果操作数的类型为"type",则结果的类型为"指向类型的指针".如果操作数是一元运算*符的结果,则不会对该运算符和&运算符进行求值,结果就好像两者都被省略,除了对运算符的约束仍然适用且结果不是左值.[...]
请注意,您应该使用%p而不是%x指针数据类型.
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |