教材: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...