C语言 结构体

0728
第九章
一、类型重定义
typedef
格式:typedef 已存在的类型 类型别名;//一般情况下类型别名大写。
1)作用:给已经存在的类型取别名。
好处:增强程序的可读性;可以简化程序;
注意&与typedef区别:&为变量取别名;typedef为已存在的类型取别名。
二、结构体的定义
定义格式:struct 结构体名{结构体成员列表};(C++中有class)
结构体成员只有确定了结构体类型的变量才会分配空间。
三、定义结构体三种形式
1)只定义结构体
struct student
{
char id[10];
char name[26];
char *sex;
int gradePoints;
};
struct student aStudent;
struct student topStudent;
2)定义结构体的同时声明结构体变量
struct student
{
char id[10];
char name[26];
int gradePoints;
}aStudent,topStudent;
3)类型重定义
typedef struct student
{
char id[10];
char name[26];
int gradePoints;
}STUDENT,ASTUDENT;
声明变量:
STUDENT aStudent;
STUDENT topStudent;
ASTUDENT aTeacher;
ASTUDENT atopTeacher;
等价于:
struct student aStudent;
struct student topStudent;
struct student bStudent;
struct student btopStudent;
注意:
1)struct
{
int a;
int b;
double c;
float d;
}aa,bb,cc;
此类结构体的声明,只能在声明结构体的同时声明变量。
2)typedef struct
{
int a;
int b;
double c;
float d;
}TEST;
TEST dd;
此类结构体的声明,可以通过重定义TEST声明变量。
四、结构体初始化和结构体访问(”.”和”->”)
1)在生命结构体变量的同时使用{}初始化;
2)逐个成员初始化;
//注意:数组名不可以做左值。如果需要对字符数组初始化,则利用strcpy函数实现。
//当结构体成员列表中有字符指针。对字符指针初始化时:可以直接对字符指针变量初始化。
①student zhangsan = {“12”,“张三”,21};//与结构体成员列表相对应。(类似于数组初始化)
②student lisi;
lisi.gradePoints=21;
strcpy(lisi.id,”12”);//lisi.id=“12”;的格式是错误的。数组名不可以做左值。如果需要对字符数组初始化,则利用strcpy函数实现。
strcpy(lisi.name,”张三”);
关于结构体类型的指针
student* wangwu;
wangwu = &zhangsan;
(*wangwu).gradePoints=22;//等同于wangwu->gradePoints = 22;指向运算符。
注意:(*wangwu).gradePoints。其中*wangwu必须加括号,考虑到优先级的问题。
wangwu->gradePoints = 40;//wangwu”指向“的结构体变量的gradePoints成员


补充,结构体在内存中的存储情况。
以8字节为一个单位,按程序的执行顺序依次分配存储空间。每个变量分配存储空间都是以8字节为单位,如果一个变量需要的存储空间,刚好是上一个变量分配8字节所剩下的空间,则不再重新划分8字节。如果不够,则重新分配8字节,直到分配够为止。当分配完成时,如果由最后一个变量分配的8字节有剩余,系统会自动补齐。
所以,结构体分配的存储空间大小一定是8字节的整数倍。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值