C語言數組數組
1、數組的概念函數
用來存儲一組數據的構造數據類型指針
特色:只能存放一種類型的數據,如所有是int型或者所有是char型,數組裏的數據成爲元素。blog
2、數組的定義內存
格式: 類型 數組名[元素個數];編譯器
舉例:存儲5我的的年齡編譯
Int agrs[5]; //在內存中開闢4x5=20個字節的存儲空間class
能夠在定義數組的同時對數組進行初始化:變量
Int ages[5]={17,18,19,20,21};遍歷
遍歷數組:
For(int i=0;i<5;i++)
{
Printf(「ages[%d]=%d\n」,i,ages[i]);
}
注意:
(1)數組的初始化
①. Int ages[5]={17,18,19,20,21};//通常寫法
②. Int ages[5]={17,18};//只對前兩個元素賦值
③. Int ages[5]={[3]=10,[4]=11};//對指定的元素賦值,這裏爲第三個和第四個
④. Int ages[]={11,12,13}.//正確,右邊的元素肯定,則個數能夠省略這裏爲3個。
⑤. Int ages[];//錯誤,編譯器沒法知道應該分配多少的存儲空間
⑥. Int ages[5];ages={17,18,19,20,21};//錯誤,只能在定義數組時這樣進行初始化
⑦. Int ages[‘A’]={1,2,3};//正確,至關因而ages[65]
⑧. Int count=5;int ages[count];//若是不進行初始化,則這種寫法正確,編譯器不會報錯爲其分配20個字節的存儲空間,ages[0]=1;ages[1]=2;能夠像這樣對數組的元素進行賦值,可是2,3,4等元素的值時不肯定的。
⑨. 而int count=5;int ages[count]={1,2,3,4,5};//這種寫法是錯誤的,在定義數組時對數組進行初始化,元素的個數必須爲常量或者不寫,不能是一個變量
(2)計算數組元素
當沒有代表數組元素個數時,如何對其進行遍歷(要求使用數組元素個數)?
可使用sizeof運算符來計算數組元素的個數
Int count=sizeof(ages)/sizeof(int); //數組的總長度除以單個的長度等於元素個數
3、數組內存存儲細節
假設有數組以下:
Int x[]={1,2};
Char ca[5]={‘a’,‘A’,‘B’,‘C’,‘D’};
數組名即表明數組的地址,數組的地址==數組名(ca)==數組的首元素的地址&ca[0]
在內存中,內存從大到小進行尋址,爲數組分配了存儲空間後,數組的元素天然的從上往下排列存儲,整個數組的地址爲首元素的地址。
模擬該數組的內存存儲細節以下:
注意:字符在內存中是以對應ASCII值的二進制形式存儲的,而非上表的形式。
在這個例子中,數組x的地址爲它的首元素的地址0x08,數組ca的地址爲0x03。
4、數組-傳址調用
Void change(int array[]) //數組能夠做爲函數的形參,能夠省略數組元素的個數
{
Array[0]=100;
}
Void change2(int a) //基本類型做爲函數的形參
{
a=200;
}
Int main()
{
Int ages[5]={1,2,3,4,5};
Change2(ages[0]);
Change(ages);
Return 0;
}
Array數組與ages數組的地址一致,若以數組做爲函數的參數,這種傳遞方式是傳址調用,傳遞的是整個數組的地址,修改形參數組元素的值,就是修改實參的值。
當你把一個數組當作參數來傳遞時,它會看作是一個指針,在該函數體內使用sizeof運算符來計算數組的長度,得出的數值永遠爲8,而非數組的實際長度,由於任何類型的指針都佔8個字節的存儲空間。
提示:數組做爲一個函數的參數時,若是函數體涉及到數組遍歷等操做,一般把數組的實際元素個數也做爲參數傳遞給函數。
如 void maxofarray(int array[],sizeof(ages)/sizeof(int)){....}
5、二維數組
Int ages[50];//數組可以存放50個int類型的數據
Int ages1[3][10];//數組可以存放3個數組,每一個數組存放10個數值,共3x10=30個述職數值。
一個二維數組a,a包括兩個一維數組a[0]和a[1],每一個一維數組都包括三個元素。
使用場合:五子棋,俄羅斯方塊等,
假設:
char Y[3][2]={
{‘A’,‘B’},
{‘C,‘D’},
{‘E,‘F’}
};
內存狀況: