找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2886|回復(fù): 0
收起左側(cè)

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

[復(fù)制鏈接]
ID:99082 發(fā)表于 2015-12-10 03:43 | 顯示全部樓層 |閱讀模式

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

對這段

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ùn)算符“()”的優(yōu)先級高于運(yùn)算符“*”,編譯器首先會認(rèn)為fp(int)是一個運(yùn)算單位,這顯然是一個函數(shù)。而對函數(shù)返回值做了取內(nèi)容運(yùn)算*(pf(int))的結(jié)果是一個整數(shù)int,因此fp是一個以整數(shù)型為入口參數(shù)、返回值為指向整數(shù)的指針的函數(shù),而不是我們希望的聲明得到的函數(shù)指針了。


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


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


C語言基礎(chǔ)教程(1):http://www.torrancerestoration.com/bbs/dpj-41177-1.html
C語言教程(2)-關(guān)鍵字 變量:http://www.torrancerestoration.com/bbs/dpj-41178-1.html
C語言教程(3)-控制語句:http://www.torrancerestoration.com/bbs/dpj-41179-1.html
C語言教程(4)-運(yùn)算符:http://www.torrancerestoration.com/bbs/dpj-41180-1.html
C語言教程(5)-函數(shù):http://www.torrancerestoration.com/bbs/dpj-41181-1.html
C語言教程(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
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

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