其實地板說的很清楚了,單獨看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;
} |