C++數組和指針加減法和sizeof問題


關於指針和加減法:

指針的加減法:指針的加減法,加多少或者減多少,主要是看所指對象的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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM