C語(yu)言(yan)數(shu)組如(ru)何(he)初始化
時間:2018-01-12 來源(yuan):未(wei)知
1.一(yi)維數組的初始化
1.1 未初始化的一維數組一維數組的成員在沒有初始化時,數組成員的值都是未知的,一旦訪問到未知的值,可能導致不可預料的情況,嚴重時可以導致軟件運行異常。
下面,將沒有初始化的數組對應的值打印
1. #include <stdio.h>
3. int main(int argc,char *argv[])
4. {
5. int numbers[5];
6.
7. int i = 0;
8. for(i = 0;i < 5;i++)
9. {
10. printf(" %d ",numbers[i]);
11. }
12. printf("\n");
13.
14. return 0;
15. }
輸(shu)出結果下:
1. 1088063360 21991 1088062960 21991 1255894432
可以看出輸出的結(jie)果是隨機的,所以一般情況(kuang)數(shu)組需(xu)要給每個元素一個確(que)定的值.
1.2 全部元素(su)初始化
一維數組的初(chu)始化就(jiu)是在(zai)定義(yi)數組時給(gei)每(mei)個元素依次賦值,一般語法如下:
1. 數(shu)組元(yuan)素類型 數(shu)組名[數(shu)組元(yuan)素個數(shu)] = {元(yuan)素值列(lie)表}
例(li)如給一個有5個整型元素進(jin)行初(chu)始化:
1. int numbers[5] = {1,2,3,4,5};
在上述初始化中,數組元素的值依次為(wei):
1. numbers[0] = 1;
2. numbers[1] = 2;
3. numbers[2] = 3;
4. numbers[3] = 4;
5. numbers[4] = 5;
如果(guo)數組(zu)的(de)全部(bu)元素初始化后(hou),則可(ke)以省略(lve)數組(zu)元素個數:
1. int numbers[] = {1,2,3,4,5};//
省(sheng)略(lve)元(yuan)素(su)個(ge)(ge)數(shu)在省(sheng)略(lve)元(yuan)素(su)個(ge)(ge)數(shu)的情況(kuang)下,如果需要計算數(shu)組元(yuan)素(su)個(ge)(ge)數(shu)可以使用下面的公式(shi)
1. 數組元素的(de)個數 = 數組總的(de)內存大(da)小 / 數組每個元素的(de)大(da)小
例如在計算 numbers 數組時(shi),可以這(zhe)樣計算: 1. sizeof(numbers) / sizeof(int)
實際在使用時如下:
1. include <stdio.h>
3. int main(int argc,char *argv[])
4. {
5. int numbers[5] = {1,2,3,4,5};
6.
7. int i;
8. for (i = 0;i < sizeof(numbers)/sizeof(int);i++)
9. {
10. printf(" %d ",numbers[i]);
11. }
12. putchar('\n');
13. return 0;
14. }
輸出結果為:
1. 1 2 3 4 5
1.3 部分元素(su)初(chu)始化
在一維數組中也可(ke)以為部分元素進行(xing)初始化,使用的方式(shi)如下:
1. int numbers[5] = {1,2,3};//對部分(fen)元(yuan)素進行初始化
如果(guo)只初始(shi)化部分元(yuan)素,則剩下的(de)沒有初始(shi)化的(de)元(yuan)素的(de)值(zhi)為(wei)0
具體使用如下:
1. #include <stdio.h>
3. int main(int argc,char *argv[])
4. {
5. int numbers[5] = {1,2,3};
6.
7. int i;
8. for (i = 0;i < sizeof(numbers)/sizeof(int);i++)
9. {
10. printf(" %d ",numbers[i]);
11. }
12. putchar('\n');
13. return 0;
14. }
輸出結果如下(xia):
1. 1 2 3 0 0
1.4 指(zhi)定元(yuan)素(su)初(chu)始化
一(yi)維數(shu)組在初始化(hua)時也可以指(zhi)定(ding)為某一(yi)個或者幾個元(yuan)素進行(xing)初始化(hua),例如可以為第2個元(yuan)素和第4個元(yuan)素進行(xing)初始化(hua)
具(ju)體的語(yu)法如下(xia)
1. int numbers[5] = {[2] = 100,[4] = 200};//指定元(yuan)素初始化,numbers[2] = 100, numbers[4] = 200
具體使用如下:
1. #include <stdio.h>
3. int main(int argc,char *argv[])
4. {
5. int numbers[5] = {[2] = 100,[4] = 200,};//指定第2個元素,第4個元素進行初 始化(從0開始計)
6.
7. int i;
8.
9. for (i = 0;i < 5;i++)
10. {
11. printf(" %d ",numbers[i]);
12. }
13.
14. putchar('\n');
15.
16. return 0;
17. }
18. ~
輸出結果如下:
1. 0 0 100 0 200
一維數組的初始化必須在定義指定元素列表,否則需要每個元素依次賦值
1. int numbers[5];
2. numbers = {1,2,3,4,5};//error :不允許,只能一個一個元素依次賦值
3.
4.
5. int i = 0;
6. for (i = 0;i < 5;i++)
7. numbers[i] = i;
2.二維(wei)數組的初始(shi)化
2.1 二維(wei)數(shu)組全元素初(chu)始化
二維數(shu)組(zu)的(de)初(chu)始(shi)化與一維數(shu)組(zu)類似,具體(ti)的(de)語法(fa)如下:
1. int numbers[2][3] = {{1,2,3},{3,4,5}};//初始化二維數組,由兩個一維數組構成 .
具(ju)體使(shi)用如下 :
1. #include <stdio.h>
3. int main(int argc,char *argv[])
4. {
5. int numbers[2][3] = {{1,2,3},{4,5,6}};
6.
7. int i,j;
8. for (i = 0;i < 2;i++)
9. {
10. for (j = 0;j < 3;j++)
11. {
12. printf(" %d ",numbers[i][j]);
13. }
14. putchar('\n');
15. }
16. return 0;
17. }
具體(ti)輸出結果如下:
1. 1 2 3
2. 4 5 6
在(zai)全(quan)部元素初始化后,可以省略行下標(biao),但(dan)是不能(neng)省略列(lie)下標(biao).
1. int numbers[][3] = {{1,2,3},{4,5,6}};
2.2 線性初(chu)始化
由于(yu)二維數組在內存(cun)存(cun)儲(chu)(chu)(chu)時,仍(reng)然是按照線性(xing)的存(cun)儲(chu)(chu)(chu)方式,具體的存(cun)儲(chu)(chu)(chu)結構如下圖(tu):

在初始化時,也可以(yi)按照一(yi)維數組的方式(shi)進行初始化
1. int numbers[2][3] = {1,2,3,4,5,6};//按照一維數組的(de)方式進(jin)行存儲
具體使用方式如下:
1. #include <stdio.h>
3. int main(int argc,char *argv[])
4. {
5. int numbers[2][3] = {1,2,3,4,5,6};
6.
7. int i,j;
8. for (i = 0;i < 2;i++)
9. {
10. for (j = 0;j < 3;j++)
11. {
12. printf(" %d ",numbers[i][j]);
13. }
14. putchar('\n');
15. }
16. return 0;
17. }
輸出結果如下:
1. 1 2 3
2. 4 5 6
2.3 部分元素初始化
與一(yi)維數(shu)組一(yi)樣,也可以對部(bu)分元(yuan)素進行(xing)初始化,具體方式(shi)如下:
1. int numbers[2][3] = {{1,2},{4,5}};
具體的代碼如下:
1. #include <stdio.h>
3. int main(int argc,char *argv[])
4. {
5. int numbers[2][3] = {{1,2},{4,5}};
6.
7. int i,j;
8. for (i = 0;i < 2;i++)
9. {
10. for (j = 0;j < 3;j++)
11. {
12. printf(" %d ",numbers[i][j]);
13. }
14. putchar('\n');
15. }
16. return 0;
17. }
輸出結果為:
1. markyang@ubuntu:~/Templates$ ./a.out
2. 1 2 0
3. 4 5 0
對于沒有初始化的元素,對應的會設置為0.

