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