二維數組那些事

#include<iostream>
using namespace  std;ios

int main(){c++

    //const char[12]類型的值不能用於初始化char [4]
    //char array[3][4]={"hello world"};數組


    char array[3][4]={'h','e','l','l','o'};
    //*array輸出的結果是hello,即*array表示的是char*類型,而*array+1的輸出是ello
    cout<<&array<<" "<<&array+1<<" "<<*array<<" "<<*array+1<<endl;  //&array+1相比&array向後偏移了12個字節。spa

   //c++中,char* 在全部的指針類型中比較特殊。
    int arrayInt[3][4]={12,13,14,25,34,23,33};
    cout<<arrayInt<<endl;
     //輸出兩項結果相同,相比整個數組首地址偏移16個字節,說明單獨的二維數組名是一個int (*)[4]類型
    //下面第一項是得到二維數組中第二個一維數組的地址,而第二項是得到第二個一維數組首元素的地址。???
    //對數組指針引用如何理解
    cout<<arrayInt+1<<" "<<*(arrayInt+1)<<endl; 
    //第二項的輸出說明&arrayInt表示的整個二維數組的長度。
    //第三項的輸出與第一項的值相同,但意義不一樣,第一項表示的是整個數組的首地址,第三項表示的是數組首元素arrayInt[0]的地址,是一個int*
    //第四項的值爲第3項的值向後偏移4個字節(1個元素)
    //第五項先獲取二維數組中第二個一維數組的首地址,&arrayInt[1]的類型是int (*)[4],而後加1,
    //地址相對於整個數組首地址偏移32個字節。(4*4+4*4)
    //要理解第四項,記住*又稱爲解引用,*arrayInt以後表示arrayInt的第1個元素int*
    //一維數組int a[],數組名*a表示所在地址基類型的值。二維數組中*(int(*)[])得到其中內層第一個數組。以後所有轉化到一維數組的範疇。
    cout<<&arrayInt<<" "<<&arrayInt+1<<" "<<*arrayInt<<" "<<*arrayInt+1<<" "<<&arrayInt[1]+1<<endl;
    //要理解二維數組的事情,類比一維數組進行理解。一維數組中&arr表示一個數組指針,arr表示int*
    cout<<arrayInt[1]+1 <<endl;   //偏移20,下標運算符獲取第N個元素,這裏是獲取2個元素,即一個一維數組,整個數組是用其首地址來表徵的。
    getchar();
    return 0;.net


}指針

image

相關文章
相關標籤/搜索