linux 结构体 枚举,【一点一滴学嵌入式Linux】结构体、联合体和枚举

typedef struct Person{

int age;

char gender;

float high;

}person;

person d1,d2,d3;建议使用这种方式

b.struct Person{

var 1;

var 2;

}s1,s2,s3;

错误点:经常忽略(;)

4.如何初始化结构体成员

typedef struct Person{

char name[20];

int age;

char gender;

}person;

char name[20]={};

char name[20]="hello";

方式一:peson s1={"furong",18,'W'}; //初始化

方式二:person s2;                   //赋值

s2.name="xizong";//error

strcpy(s2.name,"xizong");

s2.age=18;

s2.gender='M';

5.如何引用结构体成员

typedef struct Person{

char name[20];

int age;

char gender;

}person;

结构体变量名+(.)+成员名

person s1;

s1.name

s1.age

s1.gender

练习:定义一个结构体名字叫做Class,成员自给,并且附上初值,打印

6.结构体长度

结构体的不齐

在32bit的系统中,结构体成员默认按照4字节不齐,但是如果最大字节数低于4个字节,按照最大

字节数补齐

7.结构体数组

定义结构体数组

typedef struct Person{

char name[20];

int age;

char gender;

}person;

person a[3]={{"zhangsan",20,'M'},{"mazi",29,'W'},{"wangwu",88,'W'}};//初始化

a[0].name="furong";//error

a[1].name="guoer";//error

a[2].name="xiaolongnv";//error

strcpy(a[0].name,"guoer");

a[0].age=30;

a[0].gender='M';

8.结构体指针/结构体指针分配空间

typedef struct Person{

char name[20];

int age;

char gender;

}person;

自动分配空间

person s;

person *p1=&s;

手动分配空间

person *q=malloc(28);

person *q=malloc(sizeof(person));

如何引用结构体成员

q->name

变量名+(->)+成员名

假如在结构体内部定义指针,那么一定要给这个指针分配一定的空间,最后也要手动销毁

给字符串指针赋值时建议采用strcpy()函数

如果定义了结构体指针,将指针向下偏移一个单位(p+1),那么它的地址偏移了整个结构体的

长度,到了结构体的末尾

9.结构体作为参数/返回值

建议大家使用结构体指针作为参数和返回值

10.结构体嵌套

结构体内部还可以定义结构体

typedef struct Person{

char name[20];

int age;

struct Class{

char gender;

float grade;

}s1;

}person;

11.联合体union

不同的数据使用相同的内存空间,使用时注意,一次只能使用一个成员,便于节省空间

union unionName{

var 1;

var 2;

};

typedef union Stu{

var 1;

var 2; 2

}stu;

stu s1;

在union嵌套于结构体中算结构体长度时,只算union成员中类型较大的一个类型

警告:如果同时使用,后果不堪设想!

12.枚举enum

定义方式

enum enumName{

monday,tuesday,wednesday,thursday,friday,saturday,sunday

};

枚举中的成员,默认从0开始一次递增

我们可以认为的改变成员的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值