數(shù)組是一個(gè)由若干同類型變量組成的集合,引用這些變量時(shí)可用同一名字。數(shù)組均由連續(xù)的存儲(chǔ)單元組成,最低地址對(duì)應(yīng)于數(shù)組的第一個(gè)元素,最高地址對(duì)應(yīng)于最后一個(gè)元素,數(shù)組可以是一維的,也可以是多維的。
一維數(shù)組的一般說(shuō)明形式如下:
type-specifiervar_name[size];
在C語(yǔ)言中,數(shù)組必須顯示地說(shuō)明,以便編譯程序?yàn)樗鼈兎峙鋬?nèi)存空間。在上式中,類型說(shuō)明符指明數(shù)組的類型,也就是數(shù)組中每一個(gè)元素個(gè)數(shù),一維數(shù)組的總字節(jié)數(shù)可按下式計(jì)算:
sizeof(類型)*數(shù)組長(zhǎng)度=總字節(jié)數(shù)
[例5-1]將數(shù)字0到9裝入一個(gè)整型數(shù)組。
main()
{
int x[10];/*定義包含10個(gè)整型數(shù)的數(shù)組,引用為x[0],x[1]…x[9]*/
int t;
for(t=0;t<10;++t)x[t]=t;
}
C語(yǔ)言并不檢驗(yàn)數(shù)組邊界,因此,數(shù)組的兩端都有可能越界而使其它變量的數(shù)組甚至程序代碼被破壞。在需要的時(shí)候,數(shù)組的邊界檢驗(yàn)便是程序員的職責(zé)。例如,當(dāng)使用gets()接收字符輸入時(shí),必須確認(rèn)字符數(shù)組的長(zhǎng)度足以存放最長(zhǎng)的字符串。
一維數(shù)組在本質(zhì)上是由同類數(shù)據(jù)構(gòu)成的表,例如,對(duì)下列數(shù)組a:
char a[7]
圖5-1說(shuō)明了數(shù)組a在內(nèi)存中的情形,假定起始地址為1000。
5.1.1 向函數(shù)傳遞一維數(shù)組
將一維數(shù)組傳遞給函數(shù)時(shí),把數(shù)組名作為參數(shù)直接調(diào)用函數(shù)即可,無(wú)需任何下標(biāo)。這樣,
數(shù)組的第一個(gè)元素的地址將傳遞給該函數(shù)。C語(yǔ)言并不是將整個(gè)數(shù)組作為實(shí)參來(lái)傳遞,而是用
指針來(lái)代替它。例如,下面的程序?qū)?shù)組i的第一個(gè)元素的地址傳遞給函數(shù)func1( )。
main( )
{
int i[10];
func1(i); /*函數(shù)調(diào)用,實(shí)參是數(shù)組名* /
.
.
.
}
函數(shù)若要接收一維數(shù)組的傳遞,則可以用下面的二種方法之一來(lái)說(shuō)明形式參數(shù); 1) 有界
數(shù)組;2) 無(wú)界數(shù)組。例如,函數(shù)func1 ( )要接收數(shù)組i可如下說(shuō)明:
f u n c 1 ( s t r )
char str[10]; /* 有界數(shù)組,數(shù)組的下標(biāo)只能小于或等于傳遞數(shù)組的大小。* /
{
.
.
.
}
也可說(shuō)明為:
f u n c 1 ( s t r )
char str[ ]; / * 無(wú)界數(shù)組* /
{
.
.
.
}
這二種說(shuō)明方法的效果是等價(jià)的,它們都通知編譯程序建立一個(gè)字符指針。第一種說(shuō)明
使用的是標(biāo)準(zhǔn)的數(shù)組說(shuō)明;后一種說(shuō)明使用了改進(jìn)型的數(shù)組說(shuō)明,它只是說(shuō)明函數(shù)將要接收
一個(gè)具有一定長(zhǎng)度的整型數(shù)組。細(xì)想就會(huì)發(fā)現(xiàn),就函數(shù)而言,數(shù)組究竟有多長(zhǎng)并無(wú)關(guān)緊要,
因?yàn)镃語(yǔ)言并不進(jìn)行數(shù)組的邊界檢驗(yàn)。事實(shí)上,就編譯程序而言,下面的說(shuō)明也是可行的。
func1 (str);
int str[32];
{
.
.
.
}
因?yàn)榫幾g程序只是產(chǎn)生代碼使函數(shù)func1( )接收一個(gè)指針,并非真正產(chǎn)生一個(gè)包含3 2個(gè)元
素的數(shù)組。
5.1.2 字符串使用的一維數(shù)組
顯然,一維數(shù)組的最普通的用法是作為字符串。在C語(yǔ)言中,字符串被定義為一個(gè)以空字
符終結(jié)的字符數(shù)組??兆址浴? 0’來(lái)標(biāo)識(shí),它通常是不顯示的。因此,在說(shuō)明字符數(shù)組時(shí),
必須比它要存放的最長(zhǎng)字符串多一個(gè)字符。例如,假如要定義一個(gè)存放長(zhǎng)度為1 0的字符串的
數(shù)組s,可以寫成:
char s[11];
這樣就給字符串末尾的空字符保留了空間。
盡管C語(yǔ)言并不把字符串定義為一種數(shù)據(jù)類型,但卻允許使用字符串常量。字符串常量是
由雙引號(hào)括起來(lái)的字符表。例如,下面兩個(gè)短語(yǔ)均為字符串常量:
“hello there”
“this is a test”
不必向字符串的末尾加空字符, C編譯程序會(huì)自動(dòng)完成這一工作。
C語(yǔ)言支持多串操作函數(shù),最常用的有:
名字功能
strcpy(s1 s2) 將s 2拷貝到s 1
strcat(s1 s2) 將s 2連接到s 1的末尾
s t r l e n ( s 1 ) 返回s 1的長(zhǎng)度
s t r c m p ( s 1,s 2 ) 若s 1與s 2相等,返回值為0
若s 1 < s 2,返回值小于0
若s 1 > s 2,返回值大于0
例5 – 2說(shuō)明了這些函數(shù)的用法。
[例5 – 2 ]
# include <stdio.h>
main ( )
{
char s1[80],s2[80]; /*定義字符數(shù)組* /
gets (s1); /*輸入字符串* /
gets (s2);
printf (“lengthsf: %d %d ,n”st r l e n ( s 1 ) ,st r l e n ( s 2 ) ) ;
if (!strcmp(s1,s2))
printf (“the strings are equal n”);
s t r c a t ( s 1 ,s 2 ) ;
printf (“%sn”,s 1 ) ;
}
切記,當(dāng)兩個(gè)串相等時(shí),函數(shù)strcmp( )將返回Fa l s e,因而當(dāng)測(cè)試串的等價(jià)性時(shí),要像前
例中的那樣,必須用邏輯運(yùn)算符!將測(cè)試條件取反。
當(dāng)程序運(yùn)行并以“h e l l o”和“h e l l o”這兩個(gè)串作為輸入時(shí),其輸出為:
R U N
h e l l o
h e l l o
lengths:5 5
The strings are equal
h e l l o h e l l o
一維數(shù)組
相關(guān)推薦
- 華納云香港高防服務(wù)器150G防御4.6折促銷,低至6888元/月,CN2大帶寬直連清洗,終身循環(huán)折扣
- RakSmart服務(wù)器成本優(yōu)化策略
- raksmart法蘭克福云服務(wù)器延遲高嗎?
- 自媒體人搭建直播服務(wù)器使用raksmart優(yōu)化技巧
- 華納云高防服務(wù)器3.6折起低至1188元/月,企業(yè)級(jí)真實(shí)防御20G`T級(jí),自營(yíng)機(jī)房一手服務(wù)器資源
- 選擇站群VPS時(shí)必須關(guān)注的六大核心需求
- RakSmart法蘭克福數(shù)據(jù)中心優(yōu)勢(shì)與適用場(chǎng)景
- 從入門到精通,一文搞懂vps云服務(wù)器配置怎么選擇!