int变量的第四个字符有什么问题?

时间:2013-04-18 10:00:55

标签: c

我的机器是32位PC运行centos系统,我使用GCC编译我的C代码。 并且int变量占用4个字节。所以我写了这样的代码......

    #include "stdio.h"
    int main(){
           int a=1;
           printf("%c",*(&a+1)+65);
           printf("%c",*(&a+2)+65);
           printf("%c",*(&a+3)+65);
    } 

我这样想: pC是32位,所以变量a shoule存储在内存中,如下所示:

   &a    00000001
   &a+1  00000000
   &a+2  00000000
   &a+3  00000000

所以我认为答案应该是:AAA
但真正得到的是:qA(最后一个没有打印出来。)
我对结果感到困惑。更重要的是,如果我消化最后两个printf.which:

    #include "stdio.h"
    int main(){
           int a=1;
           printf("%c",*(&a+1)+65);
    }

然后我得到了我想要的东西:A 我的代码有什么问题或者是什么;真正的错误是我在存储器中存储变量的想法...请帮我解决问题,谢谢。

3 个答案:

答案 0 :(得分:3)

此处,&a的类型为int*,因此&a+1指向下一个int(后面的4个字节)。您需要在&a

之前将char*转换为((char *) &a) + 1

答案 1 :(得分:1)

当你说“& a + 1”并不意味着+1字节时,它意味着+1 sizeof(int)。

如果你将& a转换为char *,那么你的+1意味着+1 sizeof(char)。 char的大小为1个字节。

答案 2 :(得分:0)

将指针&a投射到char *指针,就像这样

printf("%c",*((char*)&a+1)+65);

&a + 1表示您已将a的地址增加1 *大小为a,且a的大小为4字节= 4 *字符大小的char。

a的地址转换为char *指针将允许使用1 * sizeof char(= 1字节)递增a的地址