1. 程式人生 > >c語言中指標加一之後

c語言中指標加一之後

研究下指標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語言的設計很富有哲學性。