C语言结构体的学习

本文介绍了C语言中结构体的声明、初始化、相关操作及应用场景,包括成员访问、结构体间赋值等核心概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    问题描述:C语言中的结构体可以构造复杂的数据类型。例如有时函数需要传递的参数太多,此时可以考虑用结构体作为参数传入。C语言中的结构体利用函数指针和一般变量可以模拟面向对象语言编程中的属性和方法。结构体的使用非常灵活,下面记录一些结构体使用的较为基础的内容。结构体在其他一些语言中有时被称为记录、字段。
    声明:在花括号中间,每个结构代表一个作用域,可以防止命名冲突,
struct {
    int number;
    int *ptr;
    char name [NAME_LEN + 1];
}part1,part2;
    如果常用到,可以使用类型定义这样声明,
typedef struct {
    int number;
    int *ptr;
    char name [NAME_LEN + 1];
}part_t;
part_t  part1,part2;
    还有一种是结构标记声明,
struct part{
    int number;
    int *ptr;
    char name [NAME_LEN + 1];
};
struct part  part1, part2;
    初始化:可以在声明的同时初始化,如
part_t  part1 = {22, &item, "Good boy"};  // 这种初始化和数组很相似。
    也可以指定初始化:
part_t  part2 = {.number=33, .ptr=&item1, .name="Another boy"};
    相关操作:
    (1)成员访问,用“.”操作符,如part2.number = 25;
    (2)结构体间赋值,如“part2 = part1;”,直接将结构体part1的内容赋值给了part2,但数组中“array1 = array2;”是不允许的。如果要对数组赋值,可以利用结构体的这个特性,将数组放入结构体中,然后对结构体赋值,则包含在结构体中的数组也会跟着被赋值了。
    (3)作为函数参数传入或返回类型的结构体数据,可以考虑用指针来实现(当然直接用结构体传值是可以的),但是这样做可以避免结构体包含存储空间较大造成副本拷贝需要的空间占用,另外在文件操作中,打开一个文件进行操作,打开文件函数返回的就是一个结构体指针,对该文件的操作用指针即可,可以避免文件副本的重复拷贝。
### C语言结构体学习教程与资源 #### 了解基本概念 结构体是一种用户自定义的数据类型,允许存储不同类型的数据项。通过组合不同类型的变量形成一个新的复合型数据单元[^3]。 ```c struct student { int id; char name[100]; int num[2]; } stu[2]; ``` 这段代码展示了如何创建一个名为`student`的结构体,其中包含了整数、字符数组以及另一个整数数组作为成员。接着声明了一个由两个这样的学生记录组成的数组`stu`。 #### 初始化结构体实例 可以采用多种方式初始化结构体对象,包括直接赋值或使用指针数组指向多个结构体实例[^2]: ```c // 给结构体指针数组赋初值的方法之一 struct struct_original *struct1[20]; for (int i = 0; i < 20; ++i) { struct1[i] = malloc(sizeof(struct struct_original)); } ``` 这里展示的是动态分配内存并将其地址赋予指针数组中的每一个元素的过程。 #### 输入处理 当需要从标准输入读取数据填充到结构体内存区域时,可利用循环配合`scanf()`函数逐个访问各个字段完成操作[^4]: ```c for (int i = 0; i < count; ++i) { scanf("%d", &stu[i].id); } ``` 此片段说明了怎样迭代遍历整个集合并对特定属性执行I/O操作。 #### 减少内存消耗的技术 对于那些关注性能优化的应用场景而言,合理调整结构体内部成员排列顺序能够有效降低整体所占字节数量。这通常涉及到依据各组成部分的实际需求重排它们之间的相对位置以消除不必要的对齐间隙[^1]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技塑未来-苏导

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值