C 語言中的數(shù)組
數(shù)組是編程語言中用來存儲元素的集合。在 C 語言中,集合是儲存相同類型元素的集合。并且可以通過一個名稱來來訪。
--------------------------------------------
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | …… | N-1 |
--------------------------------------------
第一個元素 最后一個元素
在數(shù)組中,數(shù)組的訪問是用索引位置 0 開始的,最后一個元素的位置的索引是 N-1。所以你存入的第一個元素的位置編號是 0 ,而不是 1 。請大家注意這點。
1. 數(shù)組的聲明
數(shù)組的聲明與變量的聲明十分類似,只不過需要在變量名的后面添加一對方括號。如同下面,我們聲明了一個可以包含 10 個整數(shù)的數(shù)組一樣。
int intArray[10];
在這種形式下,你必須指明指明數(shù)組的大小,也就是方括號中的數(shù)值。
或者你在初始化的時候使用大括號直接賦值,這樣就不用直接指明數(shù)組的大小。
int intArray[]={1,2,3,4,5};
雖然沒有指明數(shù)組的大小,但是其大小就是初始化的元素的數(shù)量。 C 語言中的數(shù)組一旦聲明,其大小是不可以變化的。
上面的方式可能是在之前教課書中看到的。
在 C99 標(biāo)準(zhǔn)中,引入了一種新的方式來聲明數(shù)組。就是使用變量。之前你可以使用常量來聲明。但是不可以使用變量。這次。規(guī)則發(fā)生了變化。你可以用變量來聲明。
int a=10, intArray[a];
2. 數(shù)組的初始化
數(shù)組的初始化其實就是將聲明和賦值合在一起。
上面一節(jié),我們用了直接初始化賦值來聲明數(shù)組變量,也就是
int intArray[]={1,2,3,4,5};
還有別的初始化方式。如下面的例子所示:
int intArray[10]={1,2,3,4,5};
你可以給數(shù)組的容積為 10 個整數(shù),但是只給前 5 個位置賦值。
這里根據(jù) C99 的標(biāo)準(zhǔn),還引入了更加高級的賦值方式。
int intArray[20]={1,2,3,4,5,[8]=8,9,10,11,[19]=19};
我們在這里聲明了一個整數(shù)數(shù)組,可以容納 20 個整數(shù)。前面 5 個位置,依次賦值 1、2、3、4、、5,這個時候我們跳過中間的 6 和 7 的位置,直接給第 8 個位置賦值為 8 ,然后后面的第 9 至 11 的位置依次賦值 9、10、11,最后再對第 19 個位置賦值為 19 。
數(shù)組與變量一樣,必須經(jīng)過初始化或者賦值才能使用。否則數(shù)組中的元素將是隨意存放的。
3. 數(shù)組的使用
數(shù)組的使用和變量的使用基本一致,只不過你面對的是一個集合,而不是一個單一的元素。因此,你要訪問其中的元素的話,就要使用變量名加索引位置的方式,也就是 intArray[4] = 9
這樣的方式進(jìn)行。
4. 示例
#include <stdio.h>
int main()
{
int a = 10;
int b[10];
int c[] = {1, 2, 3, 4, 5};
int d[10] = {1, 2, 3, 4, 5};
int e[20] = {1, 2, 3, 4, 5, [8] = 8, 9, 10, 11, [19] = 19};
int f[a];
for (int i = 0; i < 10; i++)
{
printf("b[%d] = %d\n", i, b[i]);
}
for (int i = 0; i < 5; i++)
{
printf("c[%d] = %d\n", i, c[i]);
}
for (int i = 0; i < 10; i++)
{
printf("d[%d] = %d\n", i, d[i]);
}
for (int i = 0; i < 20; i++)
{
printf("e[%d] = %d\n", i, e[i]);
}
for (int i = 0; i < 10; i++)
{
printf("f[%d] = %d\n", i, f[i]);
}
return 0;
}
運行結(jié)果
b[0] = -692187488
b[1] = 32767
b[2] = -692187472
b[3] = 32767
b[4] = -1365075304
b[5] = 32673
b[6] = 0
b[7] = 0
b[8] = 0
b[9] = 0
c[0] = 1
c[1] = 2
c[2] = 3
c[3] = 4
c[4] = 5
d[0] = 1
d[1] = 2
d[2] = 3
d[3] = 4
d[4] = 5
d[5] = 0
d[6] = 0
d[7] = 0
d[8] = 0
d[9] = 0
e[0] = 1
e[1] = 2
e[2] = 3
e[3] = 4
e[4] = 5
e[5] = 0
e[6] = 0
e[7] = 0
e[8] = 8
e[9] = 9
e[10] = 10
e[11] = 11
e[12] = 0
e[13] = 0
e[14] = 0
e[15] = 0
e[16] = 0
e[17] = 0
e[18] = 0
e[19] = 19
f[0] = 0
f[1] = 0
f[2] = 1700966438
f[3] = 0
f[4] = -1365075304
f[5] = 32673
f[6] = -692187320
f[7] = 32767
f[8] = -692187264
f[9] = 32767
在上面的例子中,展示了數(shù)組的聲明,初始化和使用。通過循環(huán)語句逐個訪問數(shù)組中的元素,并將這個元素的值打印在屏幕上。
這里面還展示了如果不進(jìn)行初始化會發(fā)生什么,也就是數(shù)組中存儲的數(shù)據(jù)是不確定的。因此只有初始化的數(shù)組還有使用的價值。這個和很多編程語言是不同的。當(dāng)然,我們也可以在聲明完數(shù)組后直接使用,但是只能訪問自己賦值過的部分,因為沒有賦值過的部分值仍然是不確定的。
5. 小結(jié)
數(shù)組是程序中用來存儲相同類型元素的集合體。在 C 語言中數(shù)組只能用來存儲相同類型的元素。數(shù)組的索引是從 0 開始的,而不是我們數(shù)學(xué)中常用的 1 ,這點是當(dāng)年編程語言高度耦合硬件的殘留習(xí)慣。所以你要訪問的最后一個元素的索引是 N-1 ,其中 N 是你定義的數(shù)組的大小。訪問數(shù)組外的元素,也就是訪問的索引溢出是一個經(jīng)常發(fā)生的錯誤。很多黑客也會利用這點來訪問內(nèi)存中的未知位置。