C語言程式設計第七章 陣列 知識總結

2021-10-05 18:14:27 字數 4329 閱讀 3357

教材:c語言程式設計教程(第二版)

王敬華、林萍、張清國編著

陣列是一種構造資料型別,表示同一型別的資料項的有序集合

本章主要有三個很重要的小節:

7.1 一維陣列

7.1.1 一維陣列的定義和引用

7.1.2 一維陣列的賦值

7.2 二維陣列

7.2.1 二維陣列的定義和引用

7.2.2 二維陣列的賦值

7.3 字串與陣列

7.3.1 字串的本質

7.3.2 字元及字串操作的常用函式

7.3.3 字串陣列

7.1 一維陣列:

一維陣列的定義:

資料型別符 陣列變數名[整形常量或整形常量表示式]

如 int a[10]; float f[20]; char str[30];

(1)陣列定義時,必須指定陣列的大小,陣列的大小必須是整形常量或者整形常量表示式,不能是變數或者變數表示式

如 int n=10;

int a[n]; //錯誤,陣列的大小不能是變數

int b[10.3]; //錯誤,陣列的大小不能是浮點數

int c[n+10]; //錯誤,陣列的大小不能是變數表示式

(2)陣列定義後,系統會為其分配一定大小的記憶體空間,

記憶體空間的計算公式為:陣列所佔記憶體單元的位元組數=陣列大小*sizeof(陣列元素型別)

如 int a[10];所佔的記憶體為:104=40個位元組

float f[20]; 所佔的記憶體是:204=80個位元組

char str[30];所佔的記憶體是:30*1=30個位元組

(3)陣列中每個陣列元素型別均相同,它們占用記憶體中連續的儲存單元,並且其中第乙個陣列元素的位址是整個陣列所佔記憶體塊的低位址,也是陣列所佔記憶體塊的首位址,最後乙個元素是整個陣列所佔記憶體快的高位址(末位址)

一維陣列的引用:

引用,顧名思義就是將之前定義的陣列拿過來使用

引用的格式:陣列變數名[下標]

如 int a[10]; a[0]=2;

對於已經定義的陣列,其每個陣列元素都對應了具體的記憶體單元,因此陣列元素可以使用取位址運算子「&」來得到該陣列記憶體單元的記憶體位址。如&a[0]是陣列元素的第乙個單元的位址,它與陣列變數名a的值相等。

一維陣列的賦值:

(1)一維陣列的初始化賦值:

陣列變數名[常量表示式]=;

初值列表

a.「=」後面的表示式列表一定要用{}括起來,被括起來的表示式稱為初值表示式,表示式之間用」,「分隔;

b.表示式的個數不能超過陣列變數的大小

c.表示式1是第1個陣列元素的值,表示式2是第2個陣列元素的值,依此類推

int a[5]=; 則經過定義和初始化後,a[0]=0;a[1]=1……

d.如果表示式的個數小於陣列的大小,則未指定值的元素被賦值為0;

如 int a[5]=; 則a[3]=0;a[4]=0;

e.當對全部陣列元素賦初值時,可以省略陣列變數的大小,此時陣列變數的實際大小就是初值列表中表示式的個數。

如: char str=;則陣列str的實際大小是5

(2)一維陣列在程式中的賦值

使用賦值語句一一賦值:如 int a[4];a[0]=1;a[1]=2;

使用迴圈語句賦值

int a[10],i;

for(i=0;i<10;i++) a[i]=i;(或者 scanf("%d",&a[i])?

使用memset函式來賦值:對某記憶體塊的各個位元組賦同樣的值

如 char str[10]; memset(str,『a』,10); //將陣列str的每個記憶體單元賦值為a

使用memcpy函式實現陣列間的賦值:

如memcpy(b,a,5*sizeof(int)); //將a中的5個位元組的記憶體單元的值拷貝到b中

7.2 二維陣列

二維陣列類似於乙個矩陣,一維的大小表示矩陣的行數,二維的大小表示矩陣的列數

二維陣列的定義:int a[2][3];

二維陣列的引用 a[2][3]

int a[2][3];定義了a是乙個2*3的陣列,一共六個整形的陣列元素a[0][0],a[0][1],a[0][2],a[1][0],a[1][1],a[1][2];

c語言可以把二維陣列看作乙個特殊的一維陣列,它的陣列元素又是乙個一維陣列。如上面的陣列a,可以看成是有兩個陣列元素a[0],a[1]的一維陣列,而a[0],a[1]又是擁有3個int

型陣列元素構成的一維陣列,a[0]可以看作是由a[0][0]、a[0][1]、a[0][2]構成的一維陣列名,a[1]可以看作是由a[1][0]、a[1][1]、a[1][2]構成的一維陣列名

二維陣列的賦值

1. 二維陣列的初始化賦值

(1)分行初始化賦值

格式為:資料型別 資料變數名[行常量表示式][列常量表示式]=,……};

注意:一維陣列的大小可以省略,二維不可以省

初值表中至少要包含乙個初值,不能為空

int a[3]=,};//省略了一維大小,很正確,可以得到1維的大小是2,因為有兩個初值表。

int a[2][3]=,}; //錯誤,第乙個初值表的值為空

(2)按元素在記憶體中的排列順序初始化賦值

int a[2][3]=; //對陣列全部賦值

int a[2][3]=;//對陣列元素部分賦值

未賦值的自動賦值為0;

int a[3]=; //省略一維陣列
2.二維陣列在程式中的賦值

同一維陣列一樣,使用賦值語句、迴圈語句、庫函式memset、memcpy等方法進行

如:int n,j,a[2][3];

for(n=0;n<2;n++)

for(j=0;j<3;j++)

scanf("%d",&a[n][j]);

memset(a,0,6*sizeof(int));//把陣列a的各個元素清零

memcpy(b,a,6*sizeof(int));//如果也定義了int b[2][3],將a的各元素的值複製到b的各個元素中

今天收到了複試的通知,加油哦,加油,沉住氣!!!

2023年5月6日

最近在忙複試的事情,得到了很多老師和學長學姐的幫助,真的覺得這個世界太美好了把,有些人甚至都從來沒說上話,可是感覺他們真的竭盡全力幫我、鼓勵我,太謝謝了!

今天要複習的重點是:字串與陣列

字串的本質:字串常量就是由雙引號括起來的一組字元。但是實際上,字串是一種字元型陣列,並且這個陣列的最後乙個單元的值是『\0』(即數字0).也就是說,字串是一種以』\0』結尾的字元陣列。這個結尾的字元』\0』唯一的作用就是標識字串的結束。

字串可以通過字元陣列來存放:

定義乙個字元陣列str來存放字串china

char str=「china」;//字元型常量本來也是乙個字元型陣列,所以這裡可以去掉陣列的花括號,陣列長度是6

char str=;//陣列的長度是6

char str=;//陣列的長度是6

以上的三者都等價

但是 不等價於 char str=; //陣列大小是5,不是字串,沒有『\0』

'\0』的ascii值為0,表示null

字串常量只能在定義字元陣列變數時賦初值給字元陣列變數,而不能將乙個字串常量直接賦值給字元陣列變數。

char str[10];

str=「china」; //這種做法是錯誤的,因為str是位址常量,不可以賦值。而且"china"的值是該字串常量在記憶體中的位址,本身不是字串序列。類似於*p是表示乙個常量的值,p是表示的常量的位址。

注意:在用字元陣列來存放某個字元常量時,如果要指定字元陣列的大小,那麼其大小至少要比字串的長度大1(多定義乙個單元用於存放『\0』)

字元及字串操作的常用函式:

字串的輸入有兩個:gets函式 和 scanf函式

char str[80];

gets(str);

接受鍵盤的輸入,當輸入的字串存放在字元陣列中

C語言 第七章 陣列

c語言支援一維陣列和多維陣列。如果乙個陣列的所有元素都不是陣列,那麼該陣列稱為一維陣列。在c語言中使用陣列必須先進行定義。一維陣列的定義方式為 型別說明符 陣列名 常量表示式 型別說明符是任一種基本資料型別或構造資料型別。陣列名是使用者定義的陣列識別符號。方括號中的常量表示式表示資料元素的個數,也稱...

C語言 第七章

一 在計算機中,位 bit 是表示和儲存資訊的最小單位,1b 8bit。c 語言提供一種在位一級進行操作的機制。它允許在乙個結構體中以位為單位來指定其成員所佔記憶體的長度,這種以位為單位的成員稱為 位段 或 位域 例如 struct a unsigned aa 1 unsigned bb 1 uns...

第七章 陣列

陣列js陣列可以存放任何類資料型別書寫方法 定義式 var arr1 new array var arr2 new array 3 建立乙個長度為3的陣列 var arr3 new array 1,2,3 建立乙個內容為1,2,3的陣列 表示式 var arr 推薦寫法陣列是什麼資料型別陣列是obj...