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(字元數組);
其作用是從終端輸入一個字元串到字元數組,并且得到一個函數值,該函數值
是字元數組的起始位址。