c語言中指標加一之後
阿新 • • 發佈:2019-02-07
研究下指標p+1之後,話不多說貼程式碼測試
#include<stdio.h>
struct test {
int a;
int b;
char c;
float d;
};
int main(void)
{
int *pint;
char *pchar;
struct test *pstruct;
printf("int size = %d, char size = %d, struct test size = %d\n", sizeof(int), sizeof(char), sizeof(struct test));
printf ("pint = %d, pint + 1 = %d\n", pint ,pint + 1);
printf("pchar = %d, pchar + 1 = %d\n", pchar ,pchar + 1);
printf("pstruct = %d, pstruct + 1 = %d\n", pstruct ,pstruct + 1);
return 0;
}
int size = 4, char size = 1, struct test size = 16
pint = 0, pint + 1 = 4
pchar = 120231760, pchar + 1 = 120231761
pstruct = 4195392, pstruct + 1 = 4195408
程式碼中列印了char,int,以及test結構體的sizeof大小,然後打印出指標地址(不要在意指標地址是多少)
可以看出指標p和指標p+1的地址相差為這個指標型別的size,而不是地址+1。雖然這個結論我早就知道了,今天測試了下,結果是這樣的。
可以得出結論指標+1所增加的地址值為這個指標型別所佔用的記憶體大小的值。
聯想到陣列,結構體陣列來講,當前指標加一,正好指向下一結構體的地址,突然發現c語言的設計很富有哲學性。