那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

單片機C語言數組的詳細實例程序應用介紹

Wildesbeast ? 來源:未知 ? 2019-10-13 11:48 ? 次閱讀

數組是由具有相同類型的數據元素組成的有序集合。數組是由數組名來表示的,數組中的數據由特定的下標來唯一確定。引入數組的目的,是使用一塊連續的內存空間存儲多個類型相同的數據,以解決一批相關數據的存儲問題。數組與普通變量一樣,也必須先定義,后使用。數組在C51語言的地位舉足輕重,因此深入地了解數組是很有必要的。下面就對數組進行詳細的介紹。

(1)一維數組

一維數組是最簡單的數組,用來存放類型相同的數據。數據的存放是線性連續的。

用以下例程說明數組的建立、數據操作:

#include

/*

-----------------------------------------------------

此程序用以說明數組的建立、數據操作

-----------------------------------------------------

*/

unsigned char array[10];//定義一個有10個單元的數組

void main()

{

unsigned char i;

for(i=0;i《10;i++)

{

array[i]=i; //用下標調用數組中的元素

}

/*

---------------------------------------

array |9|8|7|6|5|4|3|2|1|0| [9]~[0]

---------------------------------------

*/

while(1);

}

數組名是用來表示數組的標識,其實它是數組的首地址,即一個指針。不過它所表示的地址是固定的,不能改動。如前幾章所述的相關內容,array[2]與*(array+2)是等效的,不過不能用array++,因為array是常量。

上面的程序中的數組是靜態建立的,以下例程來用說明數組的動態建立。

#include

#include

/*

-----------------------------------------------------

此程序用以說明數組的動態建立

-----------------------------------------------------

*/

unsigned char *parray;

void main()

{

unsigned char i;

parray=(unsigned char *)malloc(10); //動態創建一個數組

for(i=0;i《10;i++)

{

parray[i]=i; //向數組中賦值

}

free(parray); //釋放數組

while(1);

}

字符串是數組的一個重要特例。它的每個單元的數據均為字符類型(char),最后一個單元為‘\0’(0x00),用來表示字符串的結束。C51函數庫中提供了專門對字符串進行處理的函數,用以下例程說明:

#include

#include

/*

-----------------------------------------------------

此程序用以說明字符串

-----------------------------------------------------

*/

char s[]={‘y’,‘a’,‘h’,‘o’,‘o’,‘\0’};

//定義一個字符串,并對它進行初始化,以‘\0’結束

void main()

{

char s_temp[10];

strcpy(s_temp,s);//strcpy位于string.h頭文件中,實現字符拷貝

//s為一個常量,不能s++

strcpy(s_temp,“yahoo”);//與上面的語句等效

while(1);

}

以下列出幾種字符串的靈活用法,希望能夠幫助讀者深入了解字符串:

#include

#include

/*

-----------------------------------------------------

此程序用以說明字符串的靈活運用

-----------------------------------------------------

*/

/*

-----------------------------------------------------

此函數從字符串s中提取第n個子串,子串間由‘,’分隔

返回指向該子串的指針

-----------------------------------------------------

*/

char *get_sub_string(char *s,unsigned char n)

{

int i;int d=0;int fore=0;

int len=strlen(s);

for(i=0;i

{

if(s[i]==‘,’)

{

s[i]=‘\0’;

d++;

if(d==n)

{

return s+fore;

}

else

{

fore=i+1;

}

}

}

return NULL;

}

void main()

{

unsigned char c;

char string[20];

c=“yahoo”[2]; //c=‘h’

/*正如前面所述,字符串是由字符串的首地址來表示的,

字符串“yahoo”其實就是它的首地址,那就可以這樣來

取其中的某個字符:“yahoo”[2]*/

strcpy(string,“123,234,345,456”);

strcpy(string,get_sub_string(string,2));

while(1);

}

(2)二維數組

可由兩個下標確定元素的數組就稱為二維數組。其定義的一般形式為:

類型說明符 數組名[常量表達式1][常量表達式2]

例如:int array[6][4];

定義了一個二維數組array,有6行4列,共24個元素。

兩個方括號中的常量表達1與常量表達式2規定了數組的行數與列數,從而確定了數組中的元素個數。行下標從0開始,最大為5,共6行;列下標也從0開始,最大為3,共4列。數組中共有6X4=24個元素,具體如下表示:

實際使用時,可以把上述二維數組看作一個6行4列的矩陣,是一個平面的二維結構。那么編譯程序是如何用一維的存儲空間給這樣一個二維結構分配連續的存儲單元的呢C51采用按行存放的方法,即在內存中先存放第0行元素,再存放第1行、第2行、。..。..元素,每行中先存放第0列,接著存放第1列、第2列、。..。..的元素。

#include

#include

/*

-----------------------------------------------------

此程序用以說明二維數組的使用方法

-----------------------------------------------------

*/

void main()

{

unsigned char arrays[3][3]={{1,2,3},{2,3,4},{3,4,5}};

//定義一個3行3列的二維數組,其它在內存中還是以一維的方式存儲的

//用下面的方式就可以知道這一點

unsigned char test;

test=((unsigned char *)arrays)[6];//test=3;

//將二維數據的首地址強制轉為一維數組,按照一維數組的方式訪問它

while(1);

}

除了一維數組、二維數組,其實可以定義任何維的數組,多維數組用來表示由多個下標才能決定的量。

例如:int arrays[3][3][3]

表示數組arrays為一個三維數組,對應于三維存儲模型。

其實單片機內的存儲器是一維的,即所有數據都是依次順序存儲的,所以無論幾維數組都由編譯程序抽象出數組到單片機存儲的實際的一維數組映射。

#include

/*

-----------------------------------------------------

此程序用以說明三維數組

-----------------------------------------------------

*/

void main()

{

unsigned char test;

unsigned char arrays[2][2][2]={{{1,2},{2,3}},{{3,4},{4,5}}};

test=arrays[1][1][0];//test=4

test=((unsigned char *)arrays)[7]; //test=5

while(1);

}

(3)結構數組

多個結構變量也可以構成結構數組,其定義方法與定義結構變量完全相同。

如下例:

#include

/*

-----------------------------------------------------

此程序用以說明結構數組

-----------------------------------------------------

*/

typedef struct

{

int a,b,c,d;

} Stru;

void main()

{

Stru stru[10]; //定義結構數組

unsigned char i=0;

for(;i《10;i++)

{

stru[i].a=i;

stru[i].b=i;

stru[i].c=i;

stru[i].d=i;

}

while(1);

}

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6043

    文章

    44622

    瀏覽量

    638519
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137703
  • 數組
    +關注

    關注

    1

    文章

    417

    瀏覽量

    26027
收藏 人收藏

    評論

    相關推薦

    51單片機及其C語言程序開發實例

    51單片機及其C語言程序開發實例:很詳細,很全面的電子書實例
    發表于 01-03 17:25 ?255次下載

    AVR單片機C語言實例程序

    AVR單片機C語言實例程序,有需要的下來看看
    發表于 07-12 15:29 ?43次下載

    使用PIC單片機進行匯編語言的學習資料和實例程序免費下載

    本文檔的主要內容詳細介紹的是使用PIC單片機進行匯編語言的學習資料和實例程序免費下載。
    發表于 08-13 17:33 ?33次下載
    使用PIC<b class='flag-5'>單片機</b>進行匯編<b class='flag-5'>語言</b>的學習資料和<b class='flag-5'>實例程序</b>免費下載

    NEC單片機C編譯中SREG的應用實例程序說明

    本文檔的主要內容詳細介紹的是NEC單片機C編譯中SREG的應用實例程序說明。
    發表于 08-01 17:34 ?0次下載
    NEC<b class='flag-5'>單片機</b><b class='flag-5'>C</b>編譯中SREG的應用<b class='flag-5'>實例程序</b>說明

    秦龍MSP430單片機C語言應用程序設計實例精解的實例程序免費下載

    本文檔的主要內容詳細介紹的是秦龍MSP430單片機C語言應用程序設計
    發表于 09-01 08:00 ?36次下載
    秦龍MSP430<b class='flag-5'>單片機</b><b class='flag-5'>C</b><b class='flag-5'>語言</b>應用<b class='flag-5'>程序</b>設計<b class='flag-5'>實例</b>精解的<b class='flag-5'>實例程序</b>免費下載

    使用單片機C語言實現消防車警報的實例程序和工程文件免費下載

    本文檔的主要內容詳細介紹的是使用單片機C語言實現消防車警報的實例程序和工程文件免費下載。
    發表于 02-02 10:48 ?17次下載

    使用單片機C語言實現步進電機轉動原理的實例程序和工程文件免費下載

    本文檔的主要內容詳細介紹的是使用單片機C語言實現步進電機轉動原理的實例程序和工程文件免費下載。
    發表于 02-02 10:48 ?8次下載

    使用單片機實現報警發聲的C語言實例程序免費下載

    本文檔的主要內容詳細介紹的是使用單片機實現報警發聲的C語言實例程序免費下載。
    發表于 03-02 11:34 ?10次下載

    使用單片機實現步進電機轉速數碼管顯示的C語言實例程序免費下載

    本文檔的主要內容詳細介紹的是使用單片機實現步進電機轉速數碼管顯示的C語言實例程序免費下載。
    發表于 03-02 11:34 ?11次下載

    使用單片機實現步進電機按鍵控制的C語言實例程序免費下載

    本文檔的主要內容詳細介紹的是使用單片機實現步進電機按鍵控制的C語言實例程序免費下載。
    發表于 03-02 11:33 ?17次下載

    實現PC單片機雙向通信的C語言程序設計實例免費下載

    本文檔的主要內容詳細介紹的是使用單片機實現PC單片機雙向通信的C
    發表于 03-30 15:52 ?27次下載

    使用單片機實現ADC0832模數轉換與LCD顯示的C語言實例程序免費下載

    本文檔的主要內容詳細介紹的是使用單片機實現ADC0832模數轉換與LCD顯示的C語言實例程序免費下載。
    發表于 03-30 16:49 ?56次下載

    使用單片機實現單片機內置EEPROM讀寫測試的C語言實例程序免費下載

    本文檔的主要內容詳細介紹的是使用單片機實現單片機內置EEPROM讀寫測試的C語言實例程序免費下載
    發表于 03-30 16:48 ?18次下載

    使用單片機實現溫室監控系統仿真設計的C語言實例程序免費下載

    本文檔的主要內容詳細介紹的是使用單片機實現溫室監控系統仿真設計的C語言實例程序免費下載。
    發表于 03-30 16:48 ?10次下載

    使用單片機和DAC0832生成鋸齒波的C語言實例程序免費下載

    本文檔的主要內容詳細介紹的是使用單片機和DAC0832生成鋸齒波的C語言實例程序免費下載。
    發表于 03-30 16:48 ?26次下載
    乌海市| 百家乐节目视频| 大发888游戏好吗| 百家乐官网游戏制作| 全讯网高手论坛| 百家乐官网任你博娱乐平台| 大发888游戏加速| 网络百家乐官网棋牌| 百家乐玄机| 博九网百家乐官网现金网| 百家乐桌折叠| 网上百家乐官网可靠| 百家乐代打公司| 破解百家乐| 属蛇和属马合作做生意谁吃亏| 汇丰娱乐城| 百家乐游戏网上投注| 澳门百家乐官网上下限| A8百家乐娱乐| 百家乐官网游戏全讯网2| 网上百家乐信誉| 如何玩百家乐官网游戏| 威尼斯人娱乐场28gxpjwnsr| 新澳博百家乐官网娱乐城| 威尼斯人娱乐城信誉怎样| 大上海百家乐官网的玩法技巧和规则 | 百家乐庄闲筹码| 百家乐官网桌现货| 皇冠现金网是真的吗| 狮威百家乐官网的玩法技巧和规则 | 百家乐官网翻天下载| 赌博粉| 百家乐游戏打水| 百家乐官网哪条下路好| 香港六合彩网| 百家乐视频交友| 沧源| 百家乐备用网址| 永利百家乐官网赌场娱乐网规则| 海王星娱乐网| 澳门百家乐怎洋赢钱|