嵌入式開發中C語言中結構體解讀2016
嵌入式開發C語言中的結構體你瞭解了嗎?如果不瞭解,請跟yjbys小編一起來看看吧!希望能幫助到大家!
C語言允許用戶自己指定這樣一種數據結構,它由不同類型的數據組合成一個整體,以便引用,這些組合在一個整體中的數據是互相聯繫的,這樣的數據結構稱爲結構體,它相當於其它高級語言中記錄。
聲明一個結構休類型的一般形式如下:
struct 結構體名
{成員列表};
結構體名,用作結構體類型的標誌,它又稱 結構體標記,大括號內是該結構體中的各個成員,由它們組成一個結構體,對各成員都應進行類型聲明如:
類型名 成員名;
也可以把 成員列表稱爲 域表,第一個成員也稱爲結構體中的一個域。成員名定名規則寫變量名同。
struct student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
};
2 定義結構體類型變量的方法
前面只是指定了一個結構體類型,它相當於一個模型,但其中並無具體數據,系統對之也不分配實際內存單元,爲了能在程序中使用結構類型的數據,應當定義結構體類型的變量,並在其中存放具體的數據,可以採取以下3種方法定義結構體類型變量。
(1)先聲明結構體類型再定義變量名
如上面已定義了一個結構體類型 struct student,可以用它來定義變量。如:
struct student //結構體類型名
student1, student2//結構體變量名
定義了 student1, student2 爲 struct student 類型的變量。
在定義了結構體變量後,系統會爲之分配內存單元。例如 student1 和 student2在內存中各佔59個字節。
應當注意,將一個變量定義爲標準類型(基本數據類型)與定義爲結構體類型不同之處在於後者不僅要求指定變量爲結構體類型,而且要求指定爲某一特定的結構體類型(例如 struct student 類型),因爲可以定義出許多種具體的結構體類型。而在定義變量爲整形時,只需指定爲 int 型即可。
(2)在聲明類型的同時定義變量
例如:
struct student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}student1, student2;
它的作用與第一種方法相同,即定義了兩個 struct student 類型的變量 student1, student2 這種形式的定義的一般形式爲
struct 結構體名
{
成員表列
}變量名錶列;
(3)直接定義結構類型變量
其一般形式爲
struct
{
成員表列
}變量名錶列;
即不出現結構體名。
關於結構體類型,有幾點要說明:
a. 類型與變量是不同的概念,不是混同,只能對變量賦值,存取或運算,而不能對一個類型賦值,存取或運算。在編譯時,對類型是不分配空間的,只對變量分配空間。
b. 對結構體中的成員(即 域)可以單元使用,它的作用與地位相當於普通變量,
c. 成員也可以是一個結構體變量。
如:
struct date // 聲明一個結構體類型
{
int month;
int day;
int year;
}
struct student
{
int num;
char name[20];
char sex;
int age;
struct date birthday;
char addr[30];
}student1, student2;
先聲明一個 struct date 類型,它代表 日期 包括3個成員 month, day, year。然後在聲明 struct student 類型時,將成員 birthday 指定爲 struct date 類型。
d. 成員名可以與程序中的變量名相同,二者不代表同一對象。
3 結構體變量的引用
(1)不能將一個結構體變量作爲一個整體進行輸入和輸出。
只能對結構體變量中的各個成員分別進行輸入輸出。引用結構體變量中的成員的方式爲
結構體變量名.成員名
例如 表示 student1 變量中的 num 成員,即 student1 的 num 項,可以對變量的成員賦值。例如:
= 10010;
"." 是成員(分量)運算符,它在所有的運算符中優先級最高,因此可以把 作爲一個整體來看待。上面的賦值語句作用是將整數 10010賦給 student1 變量中的成員 num。
(2)如果成員本身又屬一個結構體類型,則要用若干個成員運算符,一級一級地找到最低一級的成員。只能對最低的成員進行賦值或存取以及運算。
例如:結構體變量 student1 可以這樣訪問各成員:
h
注意,不能用 hday 來訪問 student1 變量中的成員 birthday,因爲 birthday 本身是一個結構體變量。
(3)對結構體變量的成員可以像普通變量一樣進行各種運算(根據其類型決定可以進行的運算)。
e = e;
sum = e + e;
++;
++ ;
由於 "." 運算符的優先級最高,因此 ++ 是對 進行自加運算。而不是先對 age 進行自加運算。
(4)可以引用結構體變量成員的地址。也可以引用結構體變量的地址。如:
scanf("%d", &);// 輸入 的值
printf("%o", &student1);// 輸出 student1 的首地址
但不能用以下語句整體讀入結構體變量如:
scanf("%d,%s,%c,%d,%f,%s", &student1);
結構體變量的地址主要用於作函數參數,傳遞結構體的地址。
4 結構體變量的初始化
和其它類型變量一樣,對結構體變量可以在定義時指定初始值。
如:
#include
struct student
{
long int num;
char name[20];
char sex;
char addr[30];
}a = {89031, "Li Lin", 'M', "123 Beijing Road"};
void main()
{
printf("NO. : %dnname: %snsex: %cnaddress: %sn", , , , );
}
5 結構體數組
一個結構體變量中可以存放一組數據(如一個學生的學號,姓名,成績等數據)。如果有10個學生的數據需要參加運算,顯然應該用數組,這就是結構體數組。結構體數組與以前介紹過的數據值型數組不同之處在於每個數組元素都一個結構體類型的數據,它們分別包括各個成員(分量)項。
5.1 定義結構體數組
和定義結構體變量的方法相仿,只需說明其爲數組即可。
struct student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
};
struct student stu[3];
以上定義了一個數組 stu,其元素爲 struct student 類型數據,數組有 3 個元素。也可以直接定義一個結構體數組。如:
struct student
{
int num;
....
}stu[3];
或
struct
{
int num;
...
}stu[3];
5.2 結構體數組的初始化
與其它類型數組一樣,對結構體數組可以初始化如:
struct student
{
int mum;
char name[20];
char sex;
int age;
float score;
char addr[30];
}stu[3] = {{10101,"Li Lin", 'M', 18, 87.5, "103 Beijing Road"},
{10101,"Li Lin", 'M', 18, 87.5, "103 Beijing Road"},
{10101,"Li Lin", 'M', 18, 87.5, "103 Beijing Road"}};
定義數組 stu 時,元素個數可以不指定,即寫成以下形式:
stu[] = {{...},{...},{...}};
編譯時,系統會根據給出初值的結構體常量的個數來確定數組元素的個數。
當然,數組的初始化也可以用以下形式:
struct student
{
int num;
...
};
struct student stu[] = {{...},{...},{...}};
即先聲明結構體類型,然後定義數組爲該結構體類型,在定義數組時初始化。
從以上可以看到,結構體數組初始化的一般形式是在定義數組的後面加上:
5.3 結構體數組應用舉例
下面例子說明結構體數組的定義和引用。
#include
#include
#include
struct person
{
char name[20];
int count;
}leader[3] = {{"Li", 0},
{"Zhang", 0},
{"Fun", 0}};
void main()
{
int i, j;
char leader_name[20];
for(i = 1; i<= 10;i++)
{
scanf("%s", leader_name);
for(j=0;j<3;j++)
if(strcmp(leader_name, leader[j]) == 0)
leader[j]t ++;
}
printf("n");
for(i=0;i<3;i++)
printf("%5s: %dn", leader[i], leader[i]t);
system("pause");
}
運行結果如下:
LI
Li
Fun
Zhang
Zhang
Fun
Li
Fun
Zhang
Li
Li: 3
Zhang: 3
Fun: 3
6 指向結構體類型數據的指針
一個結構體變量的指針就是該變量所佔據的內存段的起始地址,可以設一個指針變量,用來指向一個結構體變量,此時該指針變量的值是結構體變量的起始地址。指針變量也可以用來指向結構體數組中的元素。
6.1 指向結構體變量的指針
指向結構體變量的指針的應用:
#include
#include
#include
struct student
{
long num;
char name[20];
char sex;
float score;
};
void main()
{
struct student stu_1;
struct student *p;
相關文章
-
嵌入式C語言中結構體詳解2016
C語言允許用戶自己指定這樣一種數據結構,它由不同類型的數據組合成一個整體,以便引用,這些組合在一個整體中的數據是互相聯繫的,這樣的數據結構稱爲結構體,它相當於其它高級語言中記錄。聲明一個結構休類型的一般形式如下:s -
2016年嵌入式開發C語言問題詳解
嵌入式系統的C語言開發中,經常遇到這樣那樣的問題。有些問題可能很快就能找到原因,但是有些問題必須有一定的經驗積累才能快速找到原因。yjbys小編整理了本人所瞭解的和經常遇到的嵌入式開發中的C語言典型問題,不足之處 -
2016年嵌入式開發職業發展解讀
近幾年來,隨着移動互聯網、物聯網的迅猛發展,嵌入式技術日漸普及,在通訊、網絡、工控、醫療、電子等領域發揮着越來越重要的作用;在介紹嵌入式開發職業發展方向之前,先了解一下嵌入式設備的本質。嵌入式設備的本質就是一 -
嵌入式開發—C語言面試題
隨着醫療電子、智能家居、物流管理和電力控制等方面的不斷風靡,嵌入式系統利用自身積累的底蘊經驗,重視和把握這個機會,想辦法在已經成熟的平臺和產品基礎上與應用傳感單元的結合,擴展物聯和感知的支持能力,發掘某種領域物 -
2016嵌入式系統開發技術知識點:嵌入式系統
嵌入式系統以應用爲中心、以計算機技術爲基礎、軟件硬件可裁剪、適應應用系統對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統。下面YJBYS小編爲大家整理了關於嵌入式系統的相關知識,希望對你有所幫助。 -
嵌入式系統開發人員C語言測試題
保育員工作培訓心得體會 當在某些事情上我們有很深的體會時,通常就可以寫一篇心得體會將其記下來,這樣就可以通過不斷總結,豐富我們的思想。相信許多人會覺得心得體會很難寫吧,以下是小編精心整理的保育員工作培訓心得體 -
2016年嵌入式c語言筆試題
爲幫助同學們更好學習嵌入式C語言,yjbys爲大家分享最新C語言筆試試題及答案,歡迎閱讀!預處理器(Preprocessor)1. 用預處理指令#define 聲明一個常數,用以表明1年中有多少秒(忽略閏年問題)#define SECONDS_PER_YEAR (60 * -
2016嵌入式系統開發技術知識點:S3C44B0的ADC
給閨蜜的生日禮物主要材料:草莓晶 10顆純銀九字針 9根純銀間隔珠 18顆純銀小配件 1個純銀龍蝦扣 1個純銀延長鏈 1根所需工具:小鑷子鉗子製作步驟:第1步:材料合集草莓晶是7mm隔珠是3mm第2步:九字針依次穿過隔珠 -
2016年嵌入式軟件C語言筆試題
嵌入式軟件廣泛應用於國防、 工控、家用、商用、辦公、醫療等領域。下文yjbys小編爲大家分享的是嵌入式軟件工程師的考試題及答案,希望對大家有所幫助!預處理器(Preprocessor)1 . 用預處理指令#define 聲明一個常數,用 -
2016年嵌入式開發中靜態代碼分析器的七種用途
時間過得真快我將要畢業了,現在我對自己做了自我鑑定如下:1.在學校的生活中,我勤奮堅強,堅持誠實。我對專業課的學習需要多練,不能空想,我比以前增加了動手的能力,。我在學習、工作、和生活上遇到許多挫折,面對着這些,我選擇了