其实地板说的很清楚了,单独看sizeof(指针),不同指针本身大小都一样(由计算机的位数决定),但不同类型的指针自己做加减运算时,地址改变量就不同了,C51很少有复杂数据结构,这个差异就很难觉察。我写个小程序,可以看到不同类型指针,在做加运算和减运算时,地址的增加量是不同的。注意要自己算一下改变量。
#include <stdio.h>
int main(){
int a = 123, *pa = &a;
double b = 456, *pb = &b;
char c = 'a', *pc = &c;
printf("&a=%#X, &b=%#X, &c=%#X\n", &a, &b, &c);
printf("pa=%#X, pb=%#X, pc=%#X\n", pa, pb, pc);
//加运算
pa++; pb++; pc++;
printf("pa=%#X, pb=%#X, pc=%#X\n", pa, pb, pc);
//减运算
pa -= 2; pb -= 2; pc -= 2;
printf("pa=%#X, pb=%#X, pc=%#X\n", pa, pb, pc);
return 0;
} |