陣列取值 C 二維 三維陣列的多種遍歷方法

2021-10-14 16:58:34 字數 1874 閱讀 5223

對於陣列,與指標變數總有千絲萬縷的關係。

int arr[3][4] = ;    int base;   // 以下三個位址值相同,但型別不同,尺寸不一    printf("%p",&arr);                  // 0012ff18    printf("%p",arr);                   // 0012ff18    printf("%p",arr[0]);                // 0012ff18    printf("%p",&arr[0][0]);            // 0012ff18    //取值需要不同級別的解引用    printf("%d",**arr);                 // 1    printf("%d",*arr[0]);               // 1    printf("%d",arr[0][0]);             // 1    printf("%p",base=(int)&arr[0][0]);  // 0012ff18                                          // +1的偏移值是其型別尺寸的偏移    printf("%d",(int)(&arr+1)-base);    // 48  sizeof(int)*4*3    printf("%d",(int)(arr+1)-base);     // 16  sizeof(int)*4    printf("%d",(int)(arr[0]+1)-base);  // 4   sizeof(int)    printf("%d",(int)(&arr[0][0])-base);// 0
一級指標,可以用一維陣列名賦值。

而對於多維陣列,與多級指標就不存在等價關係了。

對於n維陣列,可以直接用一級指標去處理,因為n維陣列在記憶體中也是線性儲存的。

另外,n維陣列,可以理解為其元素是n-1陣列,這樣,n維陣列就可以用n-1維陣列指標來表示。也可以用指標陣列(其指標指向乙個n-1維陣列)來表示。所以從這個意義上說,這是一種降維的處理方式,對於符號「*」與「」,不是很嚴格地可以理解為有一定的等價性:

#include using namespace std;int main();      int i,j;    cout<< "1 二維陣列下標遍歷"<
陣列指標也可以指向一維陣列,但寫法細節略有區別:

三維陣列的遍歷:

#include using namespace std;int main();    int* p = (int*)arr;    int i,j,k;    for(i = 0; i<2*3*4; i++)        *p++ = i+1;    p= arr[0][0]; // p = &arr[0][0][0];    for(i=0;i<2;i++)    {        for(j=0;j<3;j++)        {            for(k=0;k<4;k++)  // 以下5種方式等價                //cout<< arr[i][j][k] <

-end-

陣列(Array),二維陣列,三維陣列

陣列 array 相同型別資料的集合就叫做陣列。一 定義陣列的方法 a type 變數名 new type 陣列中元素的個數 例如 int a new int 10 或者 int a new int 10 b type 變數名 new type 例如 int a new int 二 陣列的lengt...

C語言基礎 二維陣列,三維陣列

一 二維陣列 1.二維陣列的定義 資料型別 陣列名 行 列 2.二維陣列有幾行,就代表有幾個一維陣列.int a 2 3 a 0 對應的元素是1,2,3 二維陣列的元素也是通過下標來訪問的,行和列的下標都是從0開始的,a 0 0 表示陣列a的第乙個元素.3.二維陣列的元素的個數 行數 列數 4.二維...

二維數 三維陣列

二維陣列 2017 11 10 對比 1 概念 一維陣列 存貯一組相同型別資料 二維陣列 存貯著多個一維陣列 類推 三維陣列 存貯著多個二維陣列 2 宣告 一維陣列 陣列型別 陣列名 初始值 int arr01 int arr00 new int 5 二維陣列 陣列型別 陣列名 初值 陣列型別為一維...