找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3012|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

C語(yǔ)言教程(6)-數(shù)組與函數(shù)指針

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:99082 發(fā)表于 2015-12-10 03:43 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

看到上邊的圖片里的代碼了嗎?

對(duì)這段

char* message[]={“hello”,“world”};

有感覺(jué)嗎?


--數(shù)組


--聲明一個(gè)數(shù)組

當(dāng)我們需要很多很多的數(shù)據(jù)時(shí),比如記錄一個(gè)班同學(xué)的數(shù)學(xué)成績(jī),一個(gè)月的溫度,當(dāng)然常常是更多。那么這個(gè)時(shí)候還像前邊說(shuō)的那樣一個(gè)一個(gè)的聲明就很困難了。那么就需要一個(gè)新的工具來(lái)解決這個(gè)問(wèn)題。

數(shù)組是由一系列類型相同的元素構(gòu)成的。就像聲明一個(gè)整數(shù)型一樣,可以使用聲明來(lái)告訴編譯器您需要一個(gè)數(shù)組。

int states[50];

這個(gè)語(yǔ)句的意思是聲明了一個(gè)50個(gè)整數(shù)的數(shù)組,批量聲明是不是效率高了。方括號(hào)[]表示States這個(gè)標(biāo)識(shí)符表示數(shù)組,方括號(hào)里邊的數(shù)字說(shuō)明這個(gè)數(shù)組最多能包含元素的數(shù)量。

states[0]是數(shù)組states的第一個(gè)元素,states[49]是第50個(gè)元素。告訴一個(gè)程序員數(shù)一百個(gè)數(shù),偉大的程序員同志們一般都會(huì)從0數(shù)到99,哈哈,開個(gè)玩笑。

自然還可以這樣聲明

char code[12];//12個(gè)字符的數(shù)組

float candy[365];//365個(gè)浮點(diǎn)數(shù)的數(shù)組

--給數(shù)組賦值

同樣像我們之前聲明一個(gè)整數(shù)型的量,那之后一定要給它賦值,不然我何苦聲明呢是吧。那聲明了一個(gè)數(shù)組當(dāng)然也要賦值。

參照我們之前了解的單個(gè)數(shù)值變量(有時(shí)也稱為標(biāo)量)的聲明中用表示式來(lái)賦值,如下所示:

int a=1;

相似,我們可以通過(guò)下面的方式對(duì)數(shù)組賦值:

int a[8]={0,1,2,3,4,5,6,7};

可以使用花括號(hào){}括起來(lái)的一系列數(shù)值來(lái)初始化數(shù)組。數(shù)值之間用逗號(hào)隔開,在數(shù)值和逗號(hào)之間可以使用空格。

這樣數(shù)組a的第一個(gè)元素a[0]=0,依次類推。

除了這樣賦值我們還能逐個(gè)的賦值,下邊就用一段代碼來(lái)舉個(gè)例子:

#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++)

/*通過(guò)循環(huán)執(zhí)行來(lái)賦值*/

evens[count]=2*count;

}

大家可以自己先感受一下,學(xué)過(guò)C語(yǔ)言的同學(xué)讀起來(lái)不應(yīng)該困難。

--多維數(shù)組

例如要記錄5個(gè)班每班30人的成績(jī)的學(xué)生數(shù)學(xué)成績(jī),要聲明怎樣的數(shù)組呢?其實(shí)我們可以聲明一個(gè)150個(gè)變量,使每一個(gè)變量代表一個(gè)學(xué)生的數(shù)學(xué)成績(jī),可那就體現(xiàn)不出5個(gè)班級(jí)了。但是我們也可以這樣,可以設(shè)計(jì)5個(gè)數(shù)組,每個(gè)數(shù)組包括30個(gè)元素,這是一種比較笨的方法,而且如果要記錄50個(gè)班的那就不合適了。

C語(yǔ)言為我們提供了這樣的方法,我們可以使用一個(gè)數(shù)組,即主數(shù)組包含5個(gè)元素,每個(gè)元素代表一個(gè)班級(jí)。代表一個(gè)班級(jí)的元素是包含30個(gè)元素的數(shù)組。這種數(shù)組的數(shù)組,就是二維數(shù)組?梢杂孟旅娴姆绞铰暶鳎

int sf[5][30];//數(shù)學(xué)分?jǐn)?shù),我就簡(jiǎn)稱sf了

賦值舉例:

int a[2][3]={

{3,1,2},

{3,2,1},

};

如果第一列表中只要一個(gè)數(shù),

int a[2][3]={

{3},

{3,2,1},

};

如果第一列表中只要一個(gè)數(shù),則第一含只有第一個(gè)元素得到賦值,最后兩個(gè)元素的被默認(rèn)為初始化的0,。如果列表中的數(shù)多于3個(gè),系統(tǒng)會(huì)報(bào)告錯(cuò)誤,而且不影響下一行的賦值。


--函數(shù)指針


函數(shù)指針是指向函數(shù)地址的指針。就是利用利用該指針可以知道函數(shù)在內(nèi)存中的位置。因此,也就可以利用函數(shù)指針調(diào)用函數(shù)。函數(shù)的聲明方法是:

類型 (*指針變量名)(函數(shù)的參數(shù)列表)

比如我們需要對(duì)2個(gè)變量進(jìn)行聲明,第一個(gè)是函數(shù)指針fp,該函數(shù)指針變量指向一個(gè)入口參數(shù)為一個(gè)整數(shù),返回值為另一個(gè)整數(shù)的函數(shù);第二個(gè)是函數(shù)指針數(shù)組fp_array[],這個(gè)數(shù)組的每個(gè)元素都是一個(gè)函數(shù)的指針,這些函數(shù)指針指向入口參數(shù)為一個(gè)整數(shù),返回值為指向整數(shù)的指針的函數(shù),聲明如下:

/*聲明了一個(gè)函數(shù)指針變量fp,它指向一個(gè)入口參數(shù)與返回值都是整數(shù)的函數(shù)*/

int (*fp)(int);

/*聲明了一個(gè)函數(shù)指針數(shù)組fp_array[],它的每個(gè)元素都是指向一個(gè)入口為整數(shù),返回值為整數(shù)指針的函數(shù)*/

int *fp_array[10](int);

大家要注意:在函數(shù)指針聲明中,函數(shù)的指針變量名必須寫在一個(gè)括號(hào)內(nèi),如果我們省略了這個(gè)括號(hào),那么這個(gè)聲明的含義就完全不同,如:

int *fp(int);

上邊的例子中第一行聲明是一個(gè)函數(shù)fp(),該函數(shù)有一個(gè)整數(shù)型的參數(shù)并返回一個(gè)指向整數(shù)的指針。這是因?yàn)楹瘮?shù)調(diào)用了運(yùn)算符“()”的優(yōu)先級(jí)高于運(yùn)算符“*”,編譯器首先會(huì)認(rèn)為fp(int)是一個(gè)運(yùn)算單位,這顯然是一個(gè)函數(shù)。而對(duì)函數(shù)返回值做了取內(nèi)容運(yùn)算*(pf(int))的結(jié)果是一個(gè)整數(shù)int,因此fp是一個(gè)以整數(shù)型為入口參數(shù)、返回值為指向整數(shù)的指針的函數(shù),而不是我們希望的聲明得到的函數(shù)指針了。


用了六周的時(shí)間,介紹了一點(diǎn)點(diǎn)嵌入式編程C語(yǔ)言最基礎(chǔ)的東西,只是展現(xiàn)了一個(gè)很粗略很粗略的框架,如果能和大家自學(xué)的收獲有點(diǎn)共鳴或者讓你有了自學(xué)C語(yǔ)言的想法,那就是最好的效果了。有同學(xué)說(shuō)越來(lái)越難懂了,那是當(dāng)然了,一眼就能看懂的那是韓劇,這畢竟工科知識(shí),大家堅(jiān)持堅(jiān)持。但工科知識(shí)也不是硬推硬算、死記硬背,重要的是理解。


以下是本系列教程文章列表:歡迎大家踴躍討論,有問(wèn)題可在51黑論壇回帖提出.


C語(yǔ)言基礎(chǔ)教程(1):http://www.torrancerestoration.com/bbs/dpj-41177-1.html
C語(yǔ)言教程(2)-關(guān)鍵字 變量:http://www.torrancerestoration.com/bbs/dpj-41178-1.html
C語(yǔ)言教程(3)-控制語(yǔ)句:http://www.torrancerestoration.com/bbs/dpj-41179-1.html
C語(yǔ)言教程(4)-運(yùn)算符:http://www.torrancerestoration.com/bbs/dpj-41180-1.html
C語(yǔ)言教程(5)-函數(shù):http://www.torrancerestoration.com/bbs/dpj-41181-1.html
C語(yǔ)言教程(6)-數(shù)組與函數(shù)指針:http://www.torrancerestoration.com/bbs/dpj-41182-1.html

51單片機(jī)教程:http://www.torrancerestoration.com/bbs/mcu-xuexi-1.html
STM32教程:http://www.torrancerestoration.com/bbs/dpj-41167-1.html
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表