C C 學習 7 陣列及其訪問方式

2022-04-04 01:52:20 字數 2701 閱讀 1924

說明:陣列的資料型別是一種構造型別,而儲存陣列的記憶體是一段連續的儲存區域。陣列的資料型別決定了連續記憶體的訪問方式,它包括陣列的三要素:起始位址、步長以及元素個數。

一.一維陣列

2.陣列的大小:sizeof(陣列名)=元素型別所含位元組數*元素個數;

3.初始化:

1

int arr1[10] = ;

2//部分初始化(前三個元素)

3int arr3[10] = ;

4//陣列清零

4.訪問:陣列名是陣列的唯一識別符號,陣列名具有兩重含義。

a.就作為陣列名時,表示一種構造型別,此時可以用來列印陣列的大小(包含的位元組數),例如:

1 printf("%d",sizeof(陣列名));
b.陣列名用來訪問成員時,它表示的是首元素的位址,而對陣列名取位址的時候,它表示的是整個陣列的首位址,因此,以下**的輸出結果是不一樣的,這個非常重要!

1

int arr[8] = ;

2 printf("%p\t%p\n",arr,arr+1);

3 printf("%p\t%p\n",&arr,&arr+1);

程式輸出結果:

二.二維陣列

1.形式:type name[m][n],二維陣列其實也可以看成是乙個一維陣列(任何多維陣列都可以看成是乙個一維陣列),只是資料成員的的型別由基本型別(如:int、char等)變成了構造型別:一維陣列(多維陣列)。例如int arr[3][4]可以看成是int[4] arr[3],這是乙個一維陣列,陣列名為arr,陣列成員的型別為int[4](一維陣列),陣列中的元素個數為3,其它多維陣列也可按此方式理解。

2.二維陣列在邏輯和記憶體上的理解:二維陣列在邏輯上可以理解為二維的,例如int arr[3][4],可以想成其含有3行4列,共3*4個元素,當然也可按上述方式去理解,則理解為該二維陣列中含有3個一維陣列,其中每個一維陣列中又含有四個int型別的元素,這兩種方式其實是一致的。但是計算機的記憶體是線性的,這意味著記憶體對資料的儲存方式都是一維線性的,因此,二維陣列的訪問方式可以有以下兩種:

1

//方式一

2for(int i = 0;i<3;i++)

3

7//方式二

8int *p = (int*)arr;

9for(int i = 0;i

10 printf("%d ",*p++);

3.就像是一維陣列一樣,二維陣列名也代表其第乙個元素的位址,只不過這裡的第乙個元素的型別變成了乙個一維陣列,如int arr[3][4],執行arr+1實際上相當於是在二維陣列的行間跳轉,因為arr代表的是第乙個元素(一維陣列),因此執行加一操作時,加的是該一維陣列的大小。而執行&arr+1時,就像上面提到的一樣,加的是整個陣列的大小,因為&arr+1代表的是整個陣列的起始位址。

1

int arr[3][4];

2 printf("%p %p\n",arr,arr+1);

3 printf("%p %p\n",&arr,&arr+1);

程式執行結果:

4.二維陣列的訪問方式,如對於int arr[3][4],arr[i][j]表示二維陣列第i行第j列的元素(第i個一維陣列裡面的第j個元素),也可以這樣來訪問:*(*(arr+i)+j),同樣表示第i行第j列的元素。對於第二種方式,可以這樣理解:首先,arr是乙個二維陣列,arr+i表示指向二維陣列的第i行,對其*一次則從arr這個二維陣列的二維陣列模式降到了這個二維陣列的第i行(即降維,從二維降到了第i個一維陣列),同樣的道理,對該一維陣列加j再*,則又從一維陣列模式降維到了單個元素模式,這就取出了該二維陣列的第i行第j列的元素。二維陣列的兩種訪問方式如下:

1

//方式1

2for(int i = 0;i<3;i++)

3

7//方式2

8for(int i = 0;i<3;i++)

9

三.多維陣列

1.形式:type name[x][y][z],同樣的道理,也可以理解為是這樣乙個一維陣列:type [y][z] name[x],這裡不再贅述。

四.拓展:申請乙個堆上的動態二維陣列,陣列的行列採用輸入方式確定,並且將陣列初始化為0

1.c++模式(輸入行和列以空格或回車鍵分隔)

1 #include 2

using

namespace std;34

int **getdoublearray(int row,int col)

5 12

13int main()

14

檢視**

2.c語言模式(輸入行和列以空格或回車鍵分隔)

1 #include2 #include3

4int **getarray(int rowl, int col)

5 11

12int main()

13 22

for (int i = 0; i < a; i++)

23

27for(int i = 0;i28 free (p[i]);

29 free (p);

30return 0;

31 }

檢視**

注意:返回堆上的二維空間還有其它方式,這裡暫時以以上兩種為例。

php陣列及其遍歷方式

1.陣列 索引陣列 索引值是整數,索引陣列是一組有序的變數 關聯陣列索引值是字串,關聯陣列是一種鍵和值對的無序集合 2.生明方式 直接賦值 變數名 下標 資料內容 使用array 語言結構新建陣列 變數名 array key1 value1,key2 value2,keyn valuen 3.陣列的...

js陣列及其遍歷方式

陣列的定義 let arr 1,2,abc true js是弱型別語言,陣列中元素可以是不同型別的,boolean型別放入值就是對應的字串true或false length屬性 表示陣列的長度,元素的個數,length屬性是可變的,這一點需要特別注意。當length屬性被設定得更大時,整個陣列的狀態...

c c 學習筆記 7

今天主要學習是關於指標的。p p 10 or p 10 表示 p的值增加10,但是在是用如 p 時要注意,如果沒有括號,則是對p進行加1運算,而不是對p指向的物件進行加1運算。宣告 int a 10 int p p a 0 對於陣列元素a i 的引用可以寫成 a i c語言在計算陣列元素a i 時,...