c 语言 结构体


微笑 }
stu1 = {1,”wukong”, ‘m’,99.5f},
stu2 = {2, “bajie”, ‘m’, 65.0f};


typedef
为现有类型创建⼀一个类型别名
语法: typedef 原类型名 新类型名

例如: 
typedef int Integer;
Integer a = 10; //等同于 int a = 10;
使⽤用typedef定义结构体
struct student {
 ...
};
typedef struct student Student;
typedef struct student {
 ...
}Student;
结构体变量注意事项 可以直接赋值

例如:stu1 = stu2;
注意:数组不可以直接赋值 ⼩小技巧:可以通过把数组放在结构体内实现数组的直接赋值



结构体内存占⽤用
以最⼤大成员变量类型所占空间为分配单位,! 按结构体成员声明顺序⾃自上⽽而下分配。
注:分配空间不⾜足以存储成员变量时,分配新的空间单位。

结构体嵌套 结构体的成员依然可以是结构体。例如:!
typedef struct date{
 int year;

int month;

int day; } MyDate;
struct student{

char name[20];

MyDate birthday;//访问:stu1.birthday.year;
};
结构体数组 将多个结构体变量放到数组中,构成结构体数组!
例如:!
struct student students[10] = {0};
可以通过下标访问结构体变量,例如:! students[0].name; // 第⼀一个学⽣生的姓名



总结 结构体是⼀一种⽐比较灵活的数据类型,并且与OC要学的类很相似。结构体和数组的相互嵌套可以实现⽐比较复
C语言中的结构体struct)是一种复合数据类型,也可理解为自定义的数据类型,能将同类型的数据组合成一个单一的实体。结构体常用于封装相关数据、作为数据库替代、实现高级数据结构、嵌入式开发以及在函数间传递复杂数据结构等情景。比如存储学生信息,包括学号、姓名和年龄等同类型但描述学生属性的数据项,就可封装在一个结构体中。由于C语言本身支持数据库操作,结构体还能在内存中存储和操作大量数据;其可包含指向自己类型的指针,用于实现链表、树等高级数据结构;在嵌入式开发中,利于操作同一模块的多个参数和控制多个动作;也能作为函数的参数和返回值传递 [^2]。 结构体的使用方法包括定义、访问和赋值等。定义结构体有多种方式,一种是先定义结构体类型,再定义结构体变量,例如: ```c struct stu { char *name; // 姓名 int num; // 学号 char sex; // 性别 float score; // 成绩 }; struct stu stu1, stu2; ``` 也可以在定义结构体的同时定义结构体变量,如下: ```c struct stu { char *name; // 姓名 int num; // 学号 char sex; // 性别 float score; // 成绩 } stu1, stu2; ``` 访问结构体成员可以使用点号(.)运算符。若要访问结构体变量`stu1`的`name`成员,可写成`stu1.name`。 当使用结构体指针时,可使用箭头(->)运算符来访问成员,也可以使用`(*指针变量).成员名`的形式。以下是结构体指针使用的示例代码: ```c #include <stdio.h> int main() { struct { char *name; // 姓名 int num; // 学号 int age; // 年龄 char group; // 所在小组 float score; // 成绩 } stu1 = { "Tom", 12, 18, 'A', 136.5 }, *pstu = &stu1; // 读取结构体成员的值 printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", (*pstu).name, (*pstu).num, (*pstu).age, (*pstu).group, (*pstu).score); printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", pstu->name, pstu->num, pstu->age, pstu->group, pstu->score); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值