C語言學習之陣列

2021-09-26 09:37:35 字數 4361 閱讀 3318

一維陣列的定義方式:

資料型別 陣列名[整型常量表示式]

注意:方括號中只能是常量表示式,不能使用變數。常量表示式的值表示陣列最多能存放的元素的個數,也稱為陣列的大小

陣列所佔總位元組數=sizeof(資料型別)*陣列大小

int k=5;float c[k];  不合法,k是變數

#define m 20 

int num[m];  //合法,m是編譯預處理命令define定義的符號常量

&陣列名[下標]代表元素在記憶體中的位址。

ch[2.5+2.5]    //非法,下標只能是整型表示式

ch[10-10]  //合法,相當於ch[0]

一維陣列的初始化

變數的初始化就是定義變數的同時賦初值,一維陣列初始化有以下幾種

(1)char a[5]=;

(2)int a[6]=;

(3)int a=  //在定義時中的值不能為空,只有當用初始值進行初始化時,才可省略,利用初始值的個數作為陣列的大小。

二維陣列

定義:型別說明符 陣列名[整型常量表示式][整型常量表示式];    //int a[3][4];

二維陣列的引用

類似於一維陣列元素的引用方式,二維陣列元素的引用方式也是 「陣列名[下標]」。其區別是,二維陣列是「有行有列」,因此比一維陣列多乙個下標,即 陣列名[下標][下標]

例如「int a[3][4];定義乙個具有3行4列的整型陣列a,陣列可以存放12個整數。可以將陣列a看成是由3個一維陣列組成的,每個一維陣列中又含有4個元素。這3個一維陣列的名稱是a[0]、a[1]和 a[2],第乙個陣列a[0]的各元素為a[o][o]、a[0][1]、 a[0][2]、a[o[3];第二個陣列、第三個陣列以此類推。陣列a各成員變數如下:

a[0][0],a[0][1], a[0][2], a[0][3]

a[l][0],   a[1][1],  a[1][2],   a[1][3]

a[2][0],a[2][1], a[2] [2],  a[2][3]

在記憶體中二維陣列是否也是這樣「有行有列」存放嗎?答案是否定的。計算機記憶體沒有什麼所謂的「行」與「列」,都是以位元組為單位的連續空間。二維陣列在記憶體存放時,採用「逐行存放」,行是「從上到下」,每一行是「從左至右」。例如,上例中的陣列a[3][4]在記憶體存放元素的順序是: a[o][0]→a[0][1]→a[0][2]- a[0][3]→a[1][0]-._ a[2][2]-a[2][3]。

二維陣列的初始化

二維陣列初始化有以下幾種方法

(1)int a[3][4]=,,};

(2)int a[3][4]=;

(3)int a[3][4]=,};

(4)int a[3][4]=;

(5)int a[4]=;   //只能省略行數,不能省略列數,原因在於二維陣列是按行進行存放的,省略列數就無法控制何時轉入下一行。

(6)int a[4]=;

字串與字元陣列

字串存放記憶體時,除了將其中的每個字元存入記憶體外,還要在最後加乙個「\0」字元存入記憶體,「\0」也是字串結束標誌。定義用於存放字串的字元陣列時,陣列的大小應該字串的長度+1。

1、用一維陣列存放乙個字串

(1)char a[4]=;//一維字元陣列

(2)char a[5]=;   //存放了字串abcd

(3)char a[5]=    //雙引號是字串常量的標誌

(4)char a[5]="abcd"   //與(3)等價

(5)char a="abcd" ;  //有初始值來確定陣列的大小

(6)char a=;

2、用二維陣列存放多個字串

char s[3][10]=;  //表示二維陣列最多可以存放三個字串,每個串的長度最大為9,留乙個存放『\0』

字串的輸入輸出

1、字串的輸出

字串的輸出可以使用printf()和puts()

1)printf()函式

(1)按%c的格式,利用迴圈控制語句將字串中的字元逐個輸出到螢幕

#include void main()

; for(i=0;i<6;i++)

printf("%c",str[i]); //world

}

(2)按%s的格式,用printf()將陣列的內容輸出到螢幕,直到遇到『\0』為止。

分析:從程式中可以看出利用printf()函式使用%s格式進行輸出字元陣列時,輸出列表中使用的是「陣列名」。輸出字元陣列str1時,顯示的結果中最後出現了一些隨機字元,原因在於陣列str1初始化時沒有結束標誌\0,因此輸出時會把超出陣列範圍的記憶體中隨機的字元輸出,直到遇到機內的"0'為止,這顯然不是我們所期望的。而陣列str2和str3在初始化時都是按照字串的格式進行初始化的,因此輸出結果是正常的。

因此,prinf函式採用%s的格式常用於輸出字串,輸出內容處只需書寫「陣列名」即可,但要注意陣列中存放的是否是字串。

2) puts函式

puts函式也可實現輸出字串,並且自動將字串的結束標"\0轉換成回車換行符。

2、字串的輸入字串的輸入可以使用scanf和gets函式實現。

1)scanf函式

(1)按%c的格式,利用迴圈控制語句

#include void main()

(2)按%s的格式,將豬粉草的內容輸入到字元陣列,當輸入的字元是「空格」「tab」或回車鍵,系統預設輸入結束。

2)gets函式可以實現輸入字串到字元陣列中,當遇到回車鍵時,系統預設使用者輸入結束

字串處理函式使用前要包含對應的標頭檔案string.h

strlen(字元陣列)——測字串長度

功能:計算機指定字串的實際長度(不含字串結束\0),並返回字串的長度。

strcat(字元陣列1,字元陣列2)

功能:將字元陣列2中存放的豬粉草連線到字元陣列1中存放的字串尾部,同時刪去字串1的結束標誌\0,組成新的字串,存入字元陣列1中。該函式返回的是字串1的首位址。

strcmp(字元陣列)

功能:安裝從左到右的順序依次比較字元陣列1和字元陣列2對應位置字元ascii碼值,並返回比較結果,

strcpy(字元陣列1,字元陣列2)

功能:把字元陣列2中的字元複製到字元陣列1中,結束標誌也複製進去。

注意;複製後原有的字串將被覆蓋。

執行下面的程式時,如果輸入a,則輸出結果是a123

#include #include void main()

c語言學習之陣列指標

首先,指標,就相當於乙個位址,指標變數就是拿來存放指標所指向另一變數的位址 定義乙個指標變數需要說明 指標型別,指標變數名。例 int p,a p a 而 陣列,包括陣列型別和陣列名還有陣列長度 陣列長度只能是常量 陣列有一維陣列和多維陣列。例 int a 10 內的必須是常量。那 究竟什麼是陣列指...

c語言學習 陣列

我們在程式設計時往往需要儲存很多數,這個時候我們就需要陣列這個工具了 1.陣列的宣告 型別 變數名稱 元素數量 double weight 20 元素數量必須是整數 定義 是一種容器 放東西的東西 特點是 1.其中所有的元素具有相同的資料型別 2.一旦建立,不能改變大小 3.陣列中的元素在記憶體中是...

C語言學習 陣列

代表c語言提高端段筆記哈哈 陣列加強了資料處理能力 即在記憶體中開一段連續的空間 注意從a 0 開始 include int main sum n printf d n sum for n 0 n 第乙個陣列演算法 一般計數器都用0為初值加 號聯動的原因也是因為陣列標號從0開始 陣列是有型別屬性的 ...