在C中寻址

use*_*772 2 c

#include<stdio.h>
#include<stdlib.h>   
int main(int argc, char *argv[])
{
    int x = 2;
    int *pointer2 = &x;
    int number = &x;
    printf("%x\n",number );
    printf("%x\n",number+1 );
    printf("%x\n",pointer2 );
    printf("%x\n",pointer2+1);

    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

我从gcc得到一个警告,"初始化从指针生成整数,没有强制转换[默认情况下启用]",但是当我编译时,得到以下输出:

5da24540
5da24541
5da24540
5da24544
Run Code Online (Sandbox Code Playgroud)

很明显,上面的事情没有发生,因为我们可以在输出的前两行看到地址只增加1而第二种情况下增加4.请解释并返回可以分配给其他变量的地址,如int或它是一个自我指针,只能指定给指针类型.

Jef*_*Son 7

number是一个int,用地址初始化x(int从地址"没有强制转换" - 警告告诉你,这可能不是你想要的) - 如果你增加它,它将增加1.

pointer2是一个指针int(用相同的地址初始化x),递增它的大小增加int(这种行为称为"指针算术").