天天看點

數組概念和用法

C語言為資料,提供了一種構造資料類型:數組

除引用外,數組的類型可以是任意的複合類型。數組定義中類型不能引用,即沒有引用數組,這是因為引用不能被指派,而數組中的元素必須被指派

int  & a[10];這樣寫是不正确的。

但是定義數組a的引用是可以的。

int a[6]={0,2,3,4,5,10};

int (&p)[6]=a;

如上,p是數組a的引用。

所謂數組就是一組具有相同類型的資料的有序集合。

int a[10];

float b[4];

注意:

int k,

int a[k]; 

注意:在定義數組的時候,盡量在程式開頭定義長度,不然改數組大小的時

候,非常麻煩!(程式設計規範)

例:#define N 10

int a[N ]

每個資料元素占用的位元組數,就是基類型的位元組數,一個元素占 4個位元組;

越界通路,非法通路:

int a[10]={1,2,3,4,5,6,7,8,9,10};

for(i=0;i<13;i++){

printf("a[%d]=%d\n",i,a[i]);

a[12]=100;//越界通路,非法通路

結果:.....i[10]、i[11]越界了,i[12]=12,越界通路以後,i[12]=10;

數組的初始化:若沒有顯示提供元素初值,則元素會被普通變量一樣初始化

如果是全局數組,元素初始化為0;

如果是内置數組,元素無初始化。另外

在給數組部分指派的時候,值送到數組的前幾個元素中,後面

的元素編譯器自動指派為 0。當然,系統也會相應配置設定記憶體。

例:

int a[10]={1,2,3,4,5};

雖然隻指派了五個元素,但是,後五個元素的值預設初始化為 0。系統配置設定了

4*10=40的位元組記憶體。

說明:函數不支援嵌套定義

注意:調用函數的時候,需要形式參數,比如:數組的數組名,以及數組的長

度;

例:

void print(int a[],int n)

print(a,10);

二維數組

int a[3][4](3行 4列),可以把二維數組看成一種特殊的一維數組,每個元

素就是一個一維數組;

存取方式:按行存取,行内按順序存取;

二維數組初始化,可以省略行數(前面的值),不能省略列數;

記憶體存儲:位元組數=二維數組的元素個數*4;

注意:在輸出的時候,一定要注意輸出的格式和輸出變量自身的資料類型

char a[10]:10個位元組

二維數組怎麼通過函數調用來列印?

void print(int b[][4],int row)

print(a,3);

注意:行數為空,列數不能為空!

"abcde"在記憶體中占用6個位元組;C語言規定了一個“字元串結束标志”:

'\0';

字元數組并不要求它的最後一個字元為'\0',甚至可以不包括'\0'。系統對字

符串常量自動加一個'\0'。是以,為了使處理方法一緻,在字元數組中也常人

為地加上一個'\0'。

執行個體:要用一個新的字元串代替原有的字元串”Pascal program” ,從鍵盤向

字元數組輸入∶Hello ;如果不加′\0′的話,字元數組中的字元如下∶

Hellol program ;

字元數組的輸入輸出:

1.逐個字元輸入輸出,用格式符“%c”輸入或輸出一個字元;

2.将整個字元串一次輸入或輸出。用“%s”格式符,意思是對字元串的輸入輸

出。

說明:

1.用“%s”格式符輸出字元串時,printf函數中輸出項是字元數組名,而不是

數組元素名;

2.如果數組長度大于字元串實際長度,也隻輸出到遇到'\0'結束;

3.輸出字元不包括結束符‘\0’;

4.如果一個字元數組中包含一個以上的'\0',則遇到第一個'\0'時輸出就結

束;

5.可以用scanf函數輸入一個字元串;

6.scanf不會吸收回車換行和空格。

字元串處理函數:

· gets/puts系列

puts函數:[讀取字元串]

文法: ostream &put( char ch );

一般格式:puts(字元數組);

用puts函數輸出的字元串中可以包含轉義字元,例如:\n;

函數put()用于輸出流,并把字元ch寫入流中。

作用:将一個字元串以'\0'結束的字元序列輸出到終端。

gets函數:[列印字元串]

一般形式:gets(字元數組);

其作用是從終端輸入一個字元串到字元數組,并且得到一個函數值,該函數值

是字元數組的起始位址。