單片機的C語言中數組的用法

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

(1)一維數組

本文引用地址:http://www.eepw.com.cn/article/201611/320327.htm

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

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

#include

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

void main()

{

unsigned char i;

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

{

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

}

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),最後一個單元為 (0x00),用來表示字符串的結束。C51函數庫中提供了專門對字符串進行處理的函數,用以下例程說明:

#include

#include

char s[]={y,a,h,o,o, };

//定義一個字符串,並對它進行初始化,以 結束

void main()

{

char s_temp[10];

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

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

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

while(1);

}

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

#include

#include

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< FONT>

{

if(s[i]==,)

{

s[i]= ;

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

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個元素,具體如下表示:

array[0][0]

array[0][1]

array[0][2]

array[0][3]

array[1][0]

array[1][1]

array[1][2]

array[1][3]

array[2][0]

array[2][1]

array[2][2]

array[2][3]

array[3][0]

array[3][1]

array[3][2]

array[3][3]

array[4][0]

array[4][1]

array[4][2]

array[4][3]

array[5][0]

array[5][1]

array[5][2]

array[5][3]

實際使用時,可以把上述二維數組看作一個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);

}

相關焦點

  • 單片機C語言中數組的用法
    數組是由具有相同類型的數據元素組成的有序集合。數組是由數組名來表示的,數組中的數據由特定的下標來唯一確定。引入數組的目的,是使用一塊連續的內存空間存儲多個類型相同的數據,以解決一批相關數據的存儲問題。數組與普通變量一樣,也必須先定義,後使用。數組在C51語言的地位舉足輕重,因此深入地了解數組是很有必要的。下面就對數組進行詳細的介紹。
  • 單片機c語言教程:建立你的第一個KeilC51項目
    KEIL uVISION2 是眾多單片機應用開發軟體中優秀的軟體之一,它支持眾多不一樣公司的MCS51架構的晶片,它集編輯,編譯,仿真等於一體,同時還支持,PLM,彙編和C語言的程序設計,它的界面和常用的微軟 VC++的界面相似,界面友好,易學易用,在調試程序,軟體仿真方面也有很強大的功能。本站提供的單片機c語言教程都是基於keilc51的。
  • 單片機中C語言延時函數
    單片機C語言延時程序計算2009-11-02 22:15單片機C語言延時程序用C語言寫出來程序非常的簡練,它是一種模塊化的語言,一種比彙編更高級的語言,但是就是這樣一種語言也還是有它不足之處:它的延時很不好控制
  • 51單片機C語言教程(四) 數據類型
    先來簡單說說C語言的標識符和關鍵字。標識符是用來標識源程序中某個對象的名字的,這些對象可以是語句、數據類型、函數、變量、數組等等。C語言是大小字敏感的一種高級語言,如果我們要定義一個定時器1,可以寫做"Timer1",如果程序中有"TIMER1",那麼這兩個是完全不同定義的標識符。
  • c語言中sscanf函數的高級用法
    sscanf函數用來從給定字符串中讀取所需數據,用在一些數據轉換時比較方便。常見用法和scanf類似,用%s,%d等獲取字符串和整數。但在%號後可以支持更多的格式,甚至是正則表達式,這樣一來sscanf的功能就比較強大了。
  • 51單片機C語言延時函數
    C程序中可使用不同類型的變量來進行延時設計。經實驗測試,使用unsigned char類型具有比unsigned int更優化的代碼,在使用時應該使用unsigned char作為延時變量。
  • R語言中數組的使用
    在R語言中,可以認為數組是矩陣的擴展,它將矩陣擴展到2維以上。如果給定的數組是1維的則相當於向量,2維的相當於矩陣。R語言中的數組元素的類型也是單一的,可以是數值型,邏輯型,字符型或複數型等。數組的創建在R語言中,數組使用array()函數創建。
  • 51單片機基礎剖析(基於C語言)
    處於SMALL模式下的函數參數和局部變量位於8051單片機內部RAM中,處於COMPACT和LARGE模式下的函數參數和局部變量則使用單片機外部RAM。在定義一個函數時可以明確指定該函數的存儲器模式。方法是在形參表列的後面加上一存儲模式。
  • C語言教程
    數組----C++語言代碼如果一個變量名後面跟著一個有數字的中括號,這個聲明就是數組聲明。字符串也是一種數組。  字符串----C語言的字符串其實就是char型數組,使用字符型並不需要引用庫,但是使用字符串就就需要C標準庫裡面的一些用於對字符串進行操作的函數。它們不同於字符數組。
  • PIC單片機C語言編程教程(1)
    > 語言來開發單片機系統軟體最大的好處是編寫代碼效率高、軟體調試直觀、維護升級方便、代碼的重複利用率高、便於跨平臺的代碼移植等等,因此 C 語言編程在單片機系統設計中已得到越來越廣泛的運用。針對 PIC 單片機的軟體開發,同樣可以用 C 語言實現。但在單片機上用 C 語言寫程序和在 PC 機上寫程序絕對不能簡單等同。現在的 PC 機資源十分豐富,運算能力強大,因此程式設計師在寫 PC 機的應用程式時幾乎不用關心編譯後的可執行代碼在運行過程中需要佔用多少系統資源,也基本不用擔心運行效率有多高。
  • PIC單片機C語言程序設計(8)
    《PIC 單片機C 語言程序(7)》一文介紹MPLAB IDE7.40 的安裝時, 我們已將光碟中的PICC 編譯器的壓縮軟體PICC8.05.rar( 見該文圖12)粘貼到「我的電腦」的E 盤中。所以安裝PICC 編譯器時,只需按以下步驟操作。
  • C語言中"#"和"##"的用法
    C語言中"#"和"##"的用法 3. 注意事項 3.1 舉例
  • 嵌入式開發-C語言-指針與數組
    1、指針與數組-掌握在C語言中數組的指針:是指數組在內存中的起始地址,數組元素的地址:是指數組元素在內存中的起始地址一維數組的數組名為一維數組的指針(起始地址)例:double x[8];因些,x為x數組的起始地址
  • PIC單片機CCS之C語言(#IF,#ENDIF的用法)
    len char c; //聲明字節型變量c --max; //初始化max值 len=0; //初始化len值 do { c=getc(); //從RS232口讀一個字節,存儲到c中 if(c==8) { // Backspace若是空格鍵 if(len>0) { len--;
  • 單片機c語言教程:C51變量
    這些存儲種類的具體含義和使用方法,將在第七課《變量的存儲》中進一步進行學習。而這裡的數據類型則是和我們在第四課中學習到的名種數據類型的定義是一樣的。說明了一個變量的數據類型後,還可選擇說明該變量的存儲器類型。存儲器類型的說明就是指定該變量在單片機c語言硬體系統中所使用的存儲區域,並在編譯時準確的定位。表6-1中是KEIL uVision2所能認別的存儲器類型。
  • 單片機C語言程序設計:LED 模擬交通燈
    =10) return; //閃爍 5 次Flash_Count=0;Operation_Type=3; break; c語言相關文章:c語言教程
  • 單片機c語言教程:C51數據類型
    每寫一個程序,總離不開數據的應用,在學習 c51 語言的過程中掌握理解數據類型也是 很關鍵的。先看表 3-1,表中列出了 KEIL uVision2 單片機c語言編譯器所支持的數據類型。在標準C語言中基本的數據類型為 char,int,short,long,float 和 double,而在c51編譯器中int 和 short 相同,float 和 double 相同,這裡就不列出說明了。
  • 入門C語言中的數組,字符串常量與指針
    …… int list [MAX_SIZE + 1];C數組開始於元素0,所以像陣列定義 int a[3];將創建三個int元件,可尋址如a[0],a[1],和a[2]請注意,即使定義很難說a[3],也沒有名為a[3]與其他變量一樣,全局和靜態數組元素默認情況下初始化為0,並且自動數組元素填充有垃圾值
  • 單片機c語言的sbit和sfr
    sbit大部分是用在寄存器中的,方便對寄存器的某位進行操作的。2.bit位標量 bit位標量是C51編譯器的一種擴充數據類型,利用它可定義一個位標量,但不能定義位指針,也不能定義位數組。利用它可以訪問51單片機內部的所有特殊功能寄存器。如用sfr P1 = 0x90這一句定P1為P1埠在片內的寄存器,在後面的語句中我們用以用P1 = 255(對P1埠的所有引腳置高電平)之類的語句來操作特殊功能寄存器。
  • 單片機C語言模塊化編程方法
    模塊化程序設計應該理解以下概述:(1) 模塊即是一個.c 文件和一個.h 文件的結合,頭文件(.h)中是對於該模塊接口的聲明;這一條概括了模塊化的實現方法和實質:將一個功能模塊的代碼單獨編寫成一個.c文件,然後把該模塊的接口函數放在.h文件中.舉例:假如你用到液晶顯示,那麼你可能會寫一個液晶驅動模塊,以實現字符、漢字和圖像的現實,命名為: led_device.c,該模塊的.