關於指針和加減法:
指針的加減法:指針的加減法,加多少或者減多少,主要是看所指對象的sizeof值。
例子:
double m = 3.0; int n = 3; double *p=&m; int* p1=&n; printf("p:%d\n", p ); printf("P+1:%d\n", p+1); printf("P1:%d\n", p1); printf("P1+1:%d\n", p1+1);

如上圖所示,p加了8,因為指向是double類型。p1加了4,因為指向了int。
現在我定義一個數組,int a[3]={0};看一下a+1和&a+1到底加了多少:
int p[3] = { 0 }; printf("p:%d\n", p); printf("P+1:%d\n", p + 1); printf("&p:%d\n", &p); printf("&p+1:%d\n", &p+1);

p+1加了4,&p+1加了12。
此時p指向的是數組的第一個元素,而&p指向的一個大小為3的int數組。因此p+1加的是一個int的大小,而&p+1加的是一個int[3]數組的大小12。
關於類型和sizeof:
雖然如此,但是p的類型是數組,&p的類型是指針。而sizeof的值主要是根據變量類型判斷的。
int (*p1)[3]=&p;
p1和&p的類型都是指向int [3]的指針,而p的類型就是一個int[3]的數組。PS:數組在作為參數的時候退化為一個指針。

而sizeof主要是根據變量的類型,因此指針大小自然為4,p的大小是12。

