嵌入式開發第9天(結構體,列舉,共同體,typedef)
阿新 • • 發佈:2019-02-16
複合資料型別
自定義型別,由基本的型別構成
結構體型別定義
struct 名字{
基本的型別;
{
char name[19]; //19
char sex; //1
char number[21];//21
short hight; //高度2
int age; //4
int weight; //4
};
有這麼一個結構體struct student_info型別
初始化方法1
struct student_info zhangsan = {"zhangsan",'m',"007",1.41,22,70};
struct student_info lisi = {"lisi",'w',"008",180,22,50};
初始化方法2
初始化方法3
逐個賦值
zhangsan.age = 22;
zhangsan.sex = 'm';
strcpy(zhangsan.name,"zhangsan"); //對於字串,同仁方法要為strcpy方法
1、初始化學生資訊(四個同學),資訊包括(姓名,年齡,學號,性別,身高,體重,高數成績math,C語言成績,物理成績phy。要求至少兩種方法,至少有兩個同學資訊手動輸入
struct student_info *wan
定義指標物件裡,切記用malloc分配空間
wan = malloc(sizeof(struct student_info));
指向物件的成員
指標->成員 wan->age;
{
成員;
}
舉個粟子:
enum week
{
Monday, //預設是0
Tuesday, //1
Wednesday,//2
Thursday,//3
Friday,//4
Saturda,//5
Sunday//6
};
列舉變數的預設值從0開始,往後第一個成員逐個加1
int main(void)
{
enum week week_day;
week_day = 0;
switch(week_day)
{
case 0:
printf("Today is Monday!\n");
break;
case 1:
printf("Today is Tuesday!\n");
break
;
case 2:
printf("Today is Wednesday!\n");
break;
case 3:
printf("Today is Thursday!\n");
break;
case 4:
printf("Today is Friday!\n");
break;
case 5:
printf("Today is Saturday!\n");
break;
case 6:
printf("Today is Sunday!\n");
break;
default:
printf("can't find the day!\n");
break;
}
}
聯合體
union 名字(可以自定義)
{
成員;
int a;
double b;
char c;
};
聯合體所佔的位元組數為位元組數最大的那個值,賦值的變數值會覆蓋之前變數的值
===============================================================================
如判斷當前系統處理器是大端還是小端
所謂大小端
指的是CPU本身對資料的儲存方式
大端:高位資料放在低位地址
小端:高位資料放在高位地址
採用0x12345678來驗證當前系統是大端還是小端
思路:
在一個int 地址裡傳入一個數據0x1234678
讀該基地址上的一個位元組。 char
如果值是12,就是大端。
如果值是78,就是小端。
typedef 取別字的關鍵字
typedef 已知型別(系統定義) 自定義型別
typedef int my_int;//my_int 代替了int 型別
typedef char* char_p;
typedef struct student
{
}*people;
可移植
typedef int u32;
typedef short u16;
typedef char u8;
1、建立一個包含有10同學基本資訊的“列表”,採用指標方式去完成
基本資訊包括:學號(1~99),姓名,性別,電話,QQ
要求:學號是隨機數 []
2、輸入一個日期(年,月,日),使用結構體,判斷是在本年的哪一天(注意閏年)
3、選作:把1中的列表,按學號從大到小排列
自定義型別,由基本的型別構成
結構體
結構體型別定義
struct 名字{
基本的型別;
};
結構體的大小是怎麼算出來的?
struct student_info{
char name[19]; //19
char sex; //1
char number[21];//21
short hight; //高度2
int age; //4
int weight; //4
};
以結構體內最大的資料型別為寬度(doble雖然是8但依舊以4位的寬度儲存,要了兩層)
所以先存19位
然後新增1位sex
補平 4*5的寬度再填21位
但空出3位才補平
因為short為2 所以填上
空一位,因為int的寬度為4,不可能塞進去,
所以另開一行。所以一共是 52~;
結構體的使用有這麼一個結構體struct student_info型別
初始化方法1
struct student_info zhangsan = {"zhangsan",'m',"007",1.41,22,70};
struct student_info lisi = {"lisi",'w',"008",180,22,50};
初始化方法2
struct student_info zhangsan = {
.name = "zhangsan",
.sex = 'm',.number = "007",
.hight = 1.41,
.age = 22,
.weight = 70};
struct student_info lisi = {
.name="lisi",
.sex='w',
.number ="008",
.hight = 180,
.age = 22,
.weight = 50};
初始化方法3
逐個賦值
zhangsan.age = 22;
zhangsan.sex = 'm';
strcpy(zhangsan.name,"zhangsan"); //對於字串,同仁方法要為strcpy方法
賦值方法4
從輸入端獲取資訊。
char[20={0};
printf("please input student name:\n");
bzero(array,20);
fgets(array,20,stdin);
strcpy(wangwu.name,array);
1、初始化學生資訊(四個同學),資訊包括(姓名,年齡,學號,性別,身高,體重,高數成績math,C語言成績,物理成績phy。要求至少兩種方法,至少有兩個同學資訊手動輸入
struct student_info *wan
定義指標物件裡,切記用malloc分配空間
wan = malloc(sizeof(struct student_info));
指向物件的成員
指標->成員 wan->age;
2、列舉(據說是閹割過的東西,本義是限制範圍,但我現在還不知他該用在什麼地方
enum 名字(可自己定義){
成員;
}
舉個粟子:
enum week
{
Monday, //預設是0
Tuesday, //1
Wednesday,//2
Thursday,//3
Friday,//4
Saturda,//5
Sunday//6
};
列舉變數的預設值從0開始,往後第一個成員逐個加1
int main(void)
{
enum week week_day;
week_day = 0;
switch(week_day)
{
case 0:
printf("Today is Monday!\n");
break;
case 1:
printf("Today is Tuesday!\n");
break
;
case 2:
printf("Today is Wednesday!\n");
break;
case 3:
printf("Today is Thursday!\n");
break;
case 4:
printf("Today is Friday!\n");
break;
case 5:
printf("Today is Saturday!\n");
break;
case 6:
printf("Today is Sunday!\n");
break;
default:
printf("can't find the day!\n");
break;
}
}
聯合體
union 名字(可以自定義)
{
成員;
int a;
double b;
char c;
};
聯合體所佔的位元組數為位元組數最大的那個值,賦值的變數值會覆蓋之前變數的值
===============================================================================
如判斷當前系統處理器是大端還是小端
所謂大小端
指的是CPU本身對資料的儲存方式
大端:高位資料放在低位地址
小端:高位資料放在高位地址
採用0x12345678來驗證當前系統是大端還是小端
思路:
在一個int 地址裡傳入一個數據0x1234678
讀該基地址上的一個位元組。 char
如果值是12,就是大端。
如果值是78,就是小端。
使用union,裡面定義一個int 一個char ,對int賦值,,獲取char的值,12 就是大端
int main(int argc,char **argv)
{
int i;
i=1;
char *p=(char *)&i;
if(*p==1)
printf("small")
return 0;
}
typedef 取別字的關鍵字
typedef 已知型別(系統定義) 自定義型別
typedef int my_int;//my_int 代替了int 型別
typedef char* char_p;
typedef struct student
{
}*people;
可移植
typedef int u32;
typedef short u16;
typedef char u8;
1、建立一個包含有10同學基本資訊的“列表”,採用指標方式去完成
基本資訊包括:學號(1~99),姓名,性別,電話,QQ
要求:學號是隨機數 []
2、輸入一個日期(年,月,日),使用結構體,判斷是在本年的哪一天(注意閏年)
3、選作:把1中的列表,按學號從大到小排列