看到上邊的圖片里的代碼了嗎?
對這段
char* message[]={“hello”,“world”};
有感覺嗎?
--數(shù)組
--聲明一個數(shù)組
當(dāng)我們需要很多很多的數(shù)據(jù)時,比如記錄一個班同學(xué)的數(shù)學(xué)成績,一個月的溫度,當(dāng)然常常是更多。那么這個時候還像前邊說的那樣一個一個的聲明就很困難了。那么就需要一個新的工具來解決這個問題。
數(shù)組是由一系列類型相同的元素構(gòu)成的。就像聲明一個整數(shù)型一樣,可以使用聲明來告訴編譯器您需要一個數(shù)組。
int states[50];
這個語句的意思是聲明了一個50個整數(shù)的數(shù)組,批量聲明是不是效率高了。方括號[]表示States這個標(biāo)識符表示數(shù)組,方括號里邊的數(shù)字說明這個數(shù)組最多能包含元素的數(shù)量。
states[0]是數(shù)組states的第一個元素,states[49]是第50個元素。告訴一個程序員數(shù)一百個數(shù),偉大的程序員同志們一般都會從0數(shù)到99,哈哈,開個玩笑。
自然還可以這樣聲明
char code[12];//12個字符的數(shù)組
float candy[365];//365個浮點數(shù)的數(shù)組
--給數(shù)組賦值
同樣像我們之前聲明一個整數(shù)型的量,那之后一定要給它賦值,不然我何苦聲明呢是吧。那聲明了一個數(shù)組當(dāng)然也要賦值。
參照我們之前了解的單個數(shù)值變量(有時也稱為標(biāo)量)的聲明中用表示式來賦值,如下所示:
int a=1;
相似,我們可以通過下面的方式對數(shù)組賦值:
int a[8]={0,1,2,3,4,5,6,7};
可以使用花括號{}括起來的一系列數(shù)值來初始化數(shù)組。數(shù)值之間用逗號隔開,在數(shù)值和逗號之間可以使用空格。
這樣數(shù)組a的第一個元素a[0]=0,依次類推。
除了這樣賦值我們還能逐個的賦值,下邊就用一段代碼來舉個例子:
#include <stdio.h>
#define SIZE 50//把SIZE宏定義為50
int main (void)//聲明主函數(shù)
{
/*聲明整數(shù)型數(shù)值count、數(shù)組evens*/
int count,evens[SIZE];
/*for循環(huán)*/
for(count=0,count<SIZE;count++)
/*通過循環(huán)執(zhí)行來賦值*/
evens[count]=2*count;
}
大家可以自己先感受一下,學(xué)過C語言的同學(xué)讀起來不應(yīng)該困難。
--多維數(shù)組
例如要記錄5個班每班30人的成績的學(xué)生數(shù)學(xué)成績,要聲明怎樣的數(shù)組呢?其實我們可以聲明一個150個變量,使每一個變量代表一個學(xué)生的數(shù)學(xué)成績,可那就體現(xiàn)不出5個班級了。但是我們也可以這樣,可以設(shè)計5個數(shù)組,每個數(shù)組包括30個元素,這是一種比較笨的方法,而且如果要記錄50個班的那就不合適了。
C語言為我們提供了這樣的方法,我們可以使用一個數(shù)組,即主數(shù)組包含5個元素,每個元素代表一個班級。代表一個班級的元素是包含30個元素的數(shù)組。這種數(shù)組的數(shù)組,就是二維數(shù)組。可以用下面的方式聲明:
int sf[5][30];//數(shù)學(xué)分?jǐn)?shù),我就簡稱sf了
賦值舉例:
int a[2][3]={
{3,1,2},
{3,2,1},
};
如果第一列表中只要一個數(shù),
int a[2][3]={
{3},
{3,2,1},
};
如果第一列表中只要一個數(shù),則第一含只有第一個元素得到賦值,最后兩個元素的被默認(rèn)為初始化的0,。如果列表中的數(shù)多于3個,系統(tǒng)會報告錯誤,而且不影響下一行的賦值。
--函數(shù)指針
函數(shù)指針是指向函數(shù)地址的指針。就是利用利用該指針可以知道函數(shù)在內(nèi)存中的位置。因此,也就可以利用函數(shù)指針調(diào)用函數(shù)。函數(shù)的聲明方法是:
類型 (*指針變量名)(函數(shù)的參數(shù)列表)
比如我們需要對2個變量進(jìn)行聲明,第一個是函數(shù)指針fp,該函數(shù)指針變量指向一個入口參數(shù)為一個整數(shù),返回值為另一個整數(shù)的函數(shù);第二個是函數(shù)指針數(shù)組fp_array[],這個數(shù)組的每個元素都是一個函數(shù)的指針,這些函數(shù)指針指向入口參數(shù)為一個整數(shù),返回值為指向整數(shù)的指針的函數(shù),聲明如下:
/*聲明了一個函數(shù)指針變量fp,它指向一個入口參數(shù)與返回值都是整數(shù)的函數(shù)*/
int (*fp)(int);
/*聲明了一個函數(shù)指針數(shù)組fp_array[],它的每個元素都是指向一個入口為整數(shù),返回值為整數(shù)指針的函數(shù)*/
int *fp_array[10](int);
大家要注意:在函數(shù)指針聲明中,函數(shù)的指針變量名必須寫在一個括號內(nèi),如果我們省略了這個括號,那么這個聲明的含義就完全不同,如:
int *fp(int);
上邊的例子中第一行聲明是一個函數(shù)fp(),該函數(shù)有一個整數(shù)型的參數(shù)并返回一個指向整數(shù)的指針。這是因為函數(shù)調(diào)用了運算符“()”的優(yōu)先級高于運算符“*”,編譯器首先會認(rèn)為fp(int)是一個運算單位,這顯然是一個函數(shù)。而對函數(shù)返回值做了取內(nèi)容運算*(pf(int))的結(jié)果是一個整數(shù)int,因此fp是一個以整數(shù)型為入口參數(shù)、返回值為指向整數(shù)的指針的函數(shù),而不是我們希望的聲明得到的函數(shù)指針了。
用了六周的時間,介紹了一點點嵌入式編程C語言最基礎(chǔ)的東西,只是展現(xiàn)了一個很粗略很粗略的框架,如果能和大家自學(xué)的收獲有點共鳴或者讓你有了自學(xué)C語言的想法,那就是最好的效果了。有同學(xué)說越來越難懂了,那是當(dāng)然了,一眼就能看懂的那是韓劇,這畢竟工科知識,大家堅持堅持。但工科知識也不是硬推硬算、死記硬背,重要的是理解。
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |