第一个输出应该是b
第二个应该是12345678吧
后面的就真的看不出来了,a后一个数我咋知道是啥。
#include <stdio.h>
int main (int argc, const char *argv[])
{
// insert code here..
unsigned int a,b;
a = 0x12345678;
b=-1;
if (a>b) printf("a\n");
else printf("b\n");
printf("a=%x\n",*(&a)); // a取地址然后指针指向该地址的值,也就是还是a的值16进制输出
printf("a=%x\n",*(&a + 1)); // a取地址,地址+1,然后指针指向该地址的值,该地址对应的值未定义,输出随机
printf("&a=%p\n", &a);
printf("char *(&a)=%p\n", (char *)(&a));
printf("a=%x\n",*((char*) (&a))); // a取地址,然后将int型指针(指向四个字节)转换成char型指针指向一个字节,取该指针对应的地址
printf("char * (&a)+1=%p", (char*)(&a)+1);
printf("a=%x\n",*((char*)(&a)+1));
return 0;
}
输出:
b
a=12345678
a=ffffffff
&a=000000000061FE18
a=78
char *(&a)=000000000061FE18
a=56
char * (&a)+1=000000000061FE19
定义一个int型的变量,申请四个字节的空间,其实是一个字节表示一部分,比如第一个字节的地址空间表示0x78,第二个字节表示0x56。而char * (&a)的作用就是将int型指针(指向四个字节)转换成char型指针指向一个字节,故*((char *)(&a))取第一个字节的地址空间的值78。如果组合起来看不懂的话,可以按照表达式执行的步骤拆分执行去理解。
回答不易,请及时采纳