陣列詳解,以及陣列與指標,函式

2021-07-15 09:43:37 字數 2989 閱讀 2156

一、陣列

1.1什麼是陣列

陣列:相同資料型別的元素按一定順序排列的集合,用陣列進行程式設計可以快速有效地針對大量的資料進行處理,從而提高了效率。

1.2陣列名的含義

所以的陣列名都是指標常量,它儲存著該陣列首個元素的位址,因為為常量,所以諸如num++,num--等對陣列名的運算都是不合法的。

二、一維陣列與二維陣列

2.1理解一維陣列

(1)一維陣列的定義:資料型別  陣列名 [陣列大小];(這裡陣列大小也可用巨集代替,定義巨集的好處在於有多個相同大小的陣列定義時,當修改這些陣列的大小只需修改巨集定義,提高了**質量),例如:int num[12];

(2)一維陣列的初始化

①int a[10] = ;//對所有元素賦初值

②int a[10] = ;//對前幾個元素賦初值,剩餘的元素值為0

③int a[10] = ;//使所有元素值為0

④int a[  ]  = ;//當對所以元素賦初值時可省去陣列長度(已知陣列元素總個數)

2.2一維陣列的位址及陣列名操作命令含義

(1)一維陣列示意圖

這裡a為指標常量,它代表陣列首元素a[0]的位址。

(2)&a、*(&a)與**(&a)操作命令的含義

**(&a):陣列a首元素的值

2.3理解二維陣列

(1)二維陣列的定義:資料型別  陣列名 [常量表示式][常量表示式];

對於二維陣列的理解,我們可以理解它的組成元素是一維陣列,這裡的第乙個常量表示式就是一維陣列的個數,第二個常量表示式代表著每乙個一維陣列中元素的個數。

(2)二維陣列的初始化

①int a[3][4] =,,};//對每乙個一維陣列的每個元素賦初值

②int a[3][4] =;//按下標順序給每乙個元素賦初值(從a[0][0]到a[2][3]);

③int a[3][4] = ,,};//對部分元素賦值,其他為0值(對a[0][0],a[1][0],a[2][0]賦值)

2.4二維陣列的位址及陣列名操作命令含義

(1)二維陣列示意圖

同樣這裡二維陣列名a為指標常量,它代表首個一維陣列的位址。

(2)對陣列名的操作命令及解析

②*(&a):對二維陣列a的位址取值等於首個一維陣列a[0][ ]的位址

⑥*(*(a+i)+j):第i+1個一維陣列的第j+1個元素的值

2.5陣列名的總結

任何維度的陣列名代表的含義是它代表著比它小一級別的首個元素的位址。例如:三維陣列名代表首個二維陣列的位址;四維陣列名代表首個三維陣列的位址。

三、靜態陣列與動態陣列

靜態陣列是在定義是就已經在棧上分配了空間大小,在執行時這個大小不能改變,如:

int a[10];

動態陣列的大小是在執行是給定,即,執行時在堆上分配一定的儲存空間,同時執行時還可以改變其大小。

動態陣列是相對於靜態陣列而言,從「動」字我們也可以看出它的靈活性,靜態陣列的長度是預先定義好的,在整個程式中,一旦給定大小後就無法改變。而動態陣列則不然,它可以隨程式需要而重新指定大小。動態陣列的記憶體空間是從堆動態分配的。是通過執行**而為其分配儲存空間。當程式執行到我們編寫的分配語句時,才為其分配。對於靜態陣列,其建立非常方便,使用完也無需釋放,要引用也簡單,但是建立後無法改變其大小是其致命弱點!對於動態陣列,其建立麻煩,使用完必須由程式設計師自己釋放,否則將會引起記憶體洩露。但其使用非常靈活,能根據程式需要動態分配大小。所以相對於靜態陣列的來說我們對於使用動態陣列有很大的自由度。

在建立動態陣列的過程中我們要遵循乙個原則,那就是在建立的時候從外層往裡層,逐層建立;而釋放的時候從裡層往外層,逐層釋放,比如建立一維動態陣列

————————————

#include

#include

int main()

{int n1,i;

int *array;

printf("請輸入所要建立的一維動態陣列的長度:");

scanf("%d",&n1);

array=(int*)calloc(n1,sizeof(int));

for(i=0;i

執行結果為

請輸入所要建立的一維動態陣列的長度:4

0       0       0       0

1       2       3       4       press any key to continue

二位動態陣列的話,則是先給一維陣列分配空間(第一維),再給一維陣列內部分配(第二維),釋放則是從內向外,先給第二維指標釋放,再第一維

四、陣列的函式傳參

1、陣列傳參 ●

傳一維陣列時,形參用同資料型別的指標。如:char str[100]傳參時形參可寫為char *str; ●

傳二維陣列時,形參用同資料型別的一維陣列指標。如:char str[2][100]傳參時形參為char(*str)[100]; ●

傳三維陣列時,形參用同資料型別的二維陣列指標。如:char str[2][3][100]傳參時形參為char(*str)[3][100]

總結:對於陣列的傳參,其形參為對應的指標,一維陣列為指標,二維陣列為一維陣列指標,三維陣列為二維陣列指標,以此類推。

2、指標陣列傳參

指標陣列:陣列裡面的元素都是指標。

因為陣列是用對應的指標作為形參,而指標又需要指標的指標作為形參,故傳指標陣列時用指標的指標作為形參。例如:char *src[100]的形參為char **src。

五、陣列與指標的區別

1、從記憶體分配上看,陣列是靜態分配,指標是動態分配。

2、陣列的元素過多時會出現陣列越界;對於指標則容易產生記憶體洩漏。

3、陣列的訪問方式為直接訪問,訪問效率高;指標的訪問方式為間接訪問,訪問效率低。

4、陣列分配的空間是連續的,指標分配的空間可能不是連續的。

指標陣列與陣列指標詳解

首先先定義乙個指標陣列,既然是陣列,名字就叫arr char arr 4 arr就是我定義的乙個指標陣列,它有四個元素,每個元素是乙個char 型別的指標,這些指標存放著其對應字串的首位址。當乙個變數出現左右都出現乙個運算子時,沒有記住運算子優先順序的人就會糾結arr變數到底跟哪乙個運算子先結合。如...

指標陣列與陣列指標詳解

指標的陣列 首先這個變數是乙個陣列,其次,指標 修飾這個陣列,意思是說 這個陣列的所有元素都是指標型別 在32位系統中,指標佔四個位元組 陣列指標 陣列指標可以說成是 陣列的指標 首先這個變數是乙個指標,其次,陣列 修飾這個指標,意思是說這個指標存放著乙個陣列的首位址,或者說這個指標指向乙個陣列的首...

指標陣列與陣列指標 詳解

指標陣列和 陣列指標的區別 指標陣列 傳遞多個字串用 int p 10 陣列先運算,指標 修飾陣列 陣列指標 傳遞乙個陣列的首位址用 int p 10 指標先運算,陣列修飾指標,二維陣列和 指標陣列的區別 二維陣列int p 10 20 行列固定 指標陣列int p 10 10個陣列,每個陣列都指向...