平淡最真 发表于 2018-1-11 11:42:18

关于c语言指针变量的运算问题

请教:
# include <stdio.h>

int main(void)
{
        int a;
        int * p = a;
        int * q = &a;

        printf("%d\n", p);
        printf("%d\n", q);
        intj ;
        j = q - p;

        printf("p和q相隔的地址为%d\n", j);

        return 0;
}

输出结果为:
1638196
1638204
p和q相隔的地址为2


我想问的是为什么p和q相隔的地址为2不应该是(1638204-1638196 =8)的嘛

orino 发表于 2018-1-11 12:07:35

这里相隔的地址实际内存地址的确相差8,但实际落实到数组中,因为是int数组,每个单元实际占4个字节,所以对于int大小的数组而言相差2。同理,就好比*(a+1)里面的1一样,并不是单纯内存地址加1,而是相对于int的地址+1,实际就是+4,相当于a。满意的话麻烦采纳评价,谢谢
页: [1]
查看完整版本: 关于c语言指针变量的运算问题