husuiwen 发表于 2016-7-29 10:43:58

指针问题

#include<stdio.h>

int main()
{
        int a = {1,2,3,4,5,6,7,8,9,10,11,12};
        int*p;
        for(p = a;p<(a+12);p++)
        {
                if ((p-a)%4 == 0)
                        printf("\n");
                printf("%4d\t",*p);
        }
}
我想问下if中的p-a问题:
P和a不是都代表地址吗,怎么就可以相减了呢,减了之后数字代表什么东西,地址还是什么?

Krant5 发表于 2016-7-29 13:18:38

根据指针类型的不同,做加减运算的时候操作时不同的,所以你看 很多时候定义的int *p;可以p++对吧;
这里 int a 本身 a等同于 int (* p) 类型的指针常量。而 a相当于 int *p类型的指针。这里指针的类型只是关系到做加减时候的运算量大小。a+1等同于向后偏移一个元素。也就是地址+4(32位系统)。所以说同类型的指针相减也就是中间所相隔的元素个数(p-a等于中间相隔的元素的个数)而不是地址

husuiwen 发表于 2016-7-29 17:15:00

明白了,哈哈{:5_106:}
页: [1]
查看完整版本: 指针问题