#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個元素,具體如下表示:
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);
}
評論
查看更多