一个关于指针及地址的问题,求大神帮忙....
#include "stdio.h"
int main()
{
unsigned int a=0x12345678;
char *c=(char*)&a;
printf("%x %x %x\n",*c,*(c+1),*(c+1)+1);
return 0;
}
//结果是78,56,57
怎么得出78,56的这个我知道,但是*(c+1)+1怎么得出57的?
我的理解是这样的:*(c+1)指向存储56这个字节的首地址,然后*(c+1)+1指针加1后就指向下一个字节到78那里了,那按理说输出的应该是78呀,怎么是57呢?难道*(c+1)+1同时指向了5和7?愿诸位大神能给出详细说明下... 指针
[解决办法]
(*(c+1) ) + 1
*(c+1) == 56
56 + 1 == 57
[解决办法]
// a 的四个字节简单模拟存储内存图
[解决办法]
12
[解决办法]
34
[解决办法]
56
[解决办法]
78
//入栈的顺序,取值是先进后出,所以*c先是78
// (c+1) 就就指向了56 ,
//57这个值,楼主不要困在题里面了 , *(c+1) +1, 取(c+1)地址上的内容再加1而已!
*(c+1)+1;//c+1所指向的内容+1,不是地址加1
printf("%x %x %x\n",*c,*(c+1),*(c+1)+1);
//*c 78
//*(c + 1) 56
//*(c + 1) + 1 56+1 ==57
unsigned int a=0x12345678;
char *c=(char*)&a;
//插入的代码
printf("c 所指的地址是%p,对应的字节内容是%x\n",c,*c);
printf("c+1所指的地址是%p,对应的字节内容是%x\n",c+1,*(c+1));
printf("c+2所指的地址是%p,对应的字节内容是%x\n",c+2,*(c+2));
printf("c+3所指的地址是%p,对应的字节内容是%x\n",c+3,*(c+3));
printf("%x %x %x\n",*c,*(c+1),*(c+1)+1);