这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 嵌入式开发» 软件与操作系统» 【一点一滴学嵌入式Linux】结构体、联合体和枚举

共21条 1/3 1 2 3 跳转至

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

专家
2013-08-19 21:15:37 打赏

结构体:
1.含义:
是一组具有某种关联的,但是数据类型不一致的一个集合
2:如何定义结构体
格式:
常规定义方式:
struct StrName{
var 1;
var 2;
};

#define :本质是替换,前面指代后面
#define N 30
#define q int*
typedef:一般用在对类型的定义,后面指代前面的类型
typedef int int32;
typedef unsigned int uint32;
typedef int* p;
int32 a,b,sum;
int a,b,sum; 等价的
p k,r;//定义两个指针变量
q m,n;
(int *) k,r;
int * m,n;

替换定义方式(偷懒)
typedef struct Person{
int age;
char gender;
float high;
}person;

无结构体名定义方式
struct{
int age;
char gender;
}s1,s2,s3;

缺点,无法再一次定义变量,不建议大家使用

3.如何定义结构体变量
a.struct Person{
var 1;
var 2;
};
定义:struct Person + 变量名
struct Person s1,s2,s3;


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开始一次递增
我们可以认为的改变成员的值

小结:结构体、联合体以及枚举这部分内容主要熟练结构体的使用,结构体是链表的基础。对于联合体与枚举,只需了解它们的特点及用法即可




关键词: 嵌入式 Linux 联合体 枚举 结构体

院士
2013-08-19 21:36:48 打赏
2楼

哎呦~~~~


助工
2013-08-26 00:33:15 打赏
3楼
谢谢楼主

助工
2013-08-28 06:41:01 打赏
4楼
谢谢分享,再次学习

助工
2013-09-04 13:10:44 打赏
5楼
谢谢楼主了,继续学习

助工
2013-09-06 00:55:22 打赏
6楼
谢谢楼主,请继续更新

助工
2013-09-07 00:27:41 打赏
7楼
继续学习,谢谢

助工
2013-09-08 01:13:02 打赏
8楼
继续等待,谢谢

助工
2013-09-09 00:49:06 打赏
9楼
谢谢,一定好好学习

专家
2013-09-09 17:11:42 打赏
10楼

这个是干货!!!!!


共21条 1/3 1 2 3 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]