鱼C论坛

 找回密码
 立即注册
查看: 1569|回复: 15

[已解决]结构体

[复制链接]
发表于 2023-9-29 15:56:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  请问在C语言中结构体有什么用呢?还有共用体(一次性只能用一个变量)可以干什么?谢谢
最佳答案
2023-9-29 16:04:04
风眠 发表于 2023-9-29 13:01
封装?为什么这结构体这么像python的对象?我可以把函数放里面吗?

C++中的结构体(struct)用于封装一组相关的数据成员,类似于对象。Python中的对象也具有封装数据成员的特性,所以结构体在某种程度上与Python的对象相似。

结构体可以包含数据成员和函数成员,称为成员变量和成员函数。函数成员可以被放在结构体内部,但它们默认是公有的。这使得结构体在一定程度上与类相似。但与类不同的是,结构体的成员默认是公有的,而类的成员默认是私有的。

下面是一个示例:


  1. #include <iostream>
  2. using namespace std;

  3. struct Person {
  4.     string name;
  5.     int age;

  6.     void printInfo() {
  7.         cout << "Name: " << name << endl;
  8.         cout << "Age: " << age << endl;
  9.     }
  10. };

  11. int main() {
  12.     Person person1;
  13.     person1.name = "Alice";
  14.     person1.age = 25;

  15.     person1.printInfo();

  16.     return 0;
  17. }
复制代码


在这个例子中,我们定义了一个名为Person的结构体,它有两个成员变量:name和age,以及一个成员函数printInfo。成员函数printInfo用于打印结构体的信息。

在主程序中,我们创建了一个Person类型的对象person1,并设置其成员变量name和age的值。然后通过调用成员函数printInfo来输出person1的信息。

结构体的函数成员和数据成员都可以通过对象进行访问。需要注意的是,默认情况下,结构体的函数成员和数据成员都是公有的,因此可以通过对象直接访问它们。但与类不同,结构体没有默认的私有成员访问权限。

希望这个例子对你有所帮助。如果你还有其他问题,请随时提问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-9-29 15:57:07 | 显示全部楼层
结构体是一种自定义的数据类型,可以将不同类型的数据组合在一起,形成一个新的数据类型。通过结构体,可以将多个变量打包成一个整体,方便进行处理和传递。结构体可以用于表示复杂的数据结构,如链表、树等。

共用体是一种特殊的结构体,它的所有成员共用同一块内存空间。不同的成员可以表示同一块内存的不同部分。共用体可以用于节省内存空间,或者实现类型转换等特殊的需求。需要注意的是,共用体中只能同时使用一个成员,否则会导致数据的混乱。

举个例子,假设我们要表示一个点的坐标,可以使用结构体来定义:

  1. struct Point {
  2.     int x;
  3.     int y;
  4. };
复制代码


这样,我们就可以定义一个Point类型的变量,来表示一个点的坐标:

  1. struct Point p;
  2. p.x = 10;
  3. p.y = 20;
复制代码


而如果我们使用共用体来定义一个32位整数和一个浮点数的变量,可以这样写:

  1. union Number {
  2.     int i;
  3.     float f;
  4. };

  5. union Number n;
  6. n.i = 123;
  7. printf("%d\n", n.i);   // 输出 123
  8. printf("%f\n", n.f);   // 输出一个未定义的浮点数值
  9. n.f = 1.23;
  10. printf("%d\n", n.i);   // 输出一个未定义的整数值
  11. printf("%f\n", n.f);   // 输出 1.23
复制代码


需要注意的是,共用体的不同成员之间是共享同一块内存空间的,因此对一个成员的修改会影响到其他成员的值。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-29 15:57:29 | 显示全部楼层
在C语言中,结构体和共用体是两种自定义的数据类型,它们都可以用来组织和管理不同类型的数据。下面分别介绍一下结构体和共用体的用途和特点:

结构体
- 用途:结构体用于将多个不同类型的数据组合在一起,形成一个自定义的复合数据类型。结构体可以存储相关联的数据,并且可以方便地进行操作和传递。通过结构体,我们可以将一组数据打包成一个整体,方便地表示实际问题中的复杂数据结构。
- 特点
  - 结构体可以包含多个成员变量,每个成员可以具有不同的类型。
  - 结构体的成员变量可以按需自定义命名,方便使用和理解。
  - 结构体的大小取决于其成员变量的大小之和,可以通过 sizeof 运算符获取结构体的大小。
  - 可以通过点运算符 . 来访问结构体的成员变量,或者使用指针和箭头运算符来访问结构体的成员变量。

以下是一个示例代码,展示了如何定义和使用结构体:
  1. #include <stdio.h>
  2. // 定义一个表示学生的结构体
  3. struct Student {
  4.     int id;
  5.     char name[20];
  6.     float score;
  7. };
  8. int main() {
  9.     // 创建结构体变量
  10.     struct Student student1;
  11.     // 访问结构体的成员变量,并赋值
  12.     student1.id = 1001;
  13.     strcpy(student1.name, "John");
  14.     student1.score = 85.5;
  15.     // 打印结构体的内容
  16.     printf("Student ID: %d\n", student1.id);
  17.     printf("Student Name: %s\n", student1.name);
  18.     printf("Student Score: %.2f\n", student1.score);
  19.     return 0;
  20. }
复制代码

以上代码中,我们定义了一个名为 Student 的结构体,其中包含了学生的学号、姓名和分数。通过创建结构体变量 student1,我们可以访问和操作其成员变量。

共用体(Union)
- 用途:共用体是一种特殊的数据类型,允许不同的成员共享相同的内存空间。共用体提供了一种节省内存和灵活使用内存的方式,常用于需要在不同类型之间进行转换的情况。
- 特点
  - 共用体的成员变量占用相同的内存空间,只能同时存储其中的一个。
  - 共用体的大小等于最大成员的大小。
  - 可以通过点运算符 . 或箭头运算符 -> 来访问共用体的成员变量。

以下是一个示例代码,展示了如何定义和使用共用体:
  1. #include <stdio.h>
  2. // 定义一个共用体
  3. union Data {
  4.     int i;
  5.     float f;
  6.     char str[20];
  7. };
  8. int main() {
  9.     // 创建共用体变量
  10.     union Data data;
  11.     // 赋值并打印整型数据
  12.     data.i = 10;
  13.     printf("Data as integer: %d\n", data.i);
  14.     // 赋值并打印浮点型数据
  15.     data.f = 3.14;
  16.     printf("Data as float: %.2f\n", data.f);
  17.     // 赋值并打印字符串数据
  18.     strcpy(data.str, "Hello");
  19.     printf("Data as string: %s\n", data.str);
  20.     return 0;
  21. }
复制代码

以上代码中,我们定义了一个名为 Data 的共用体,其中包含了整型、浮点型和字符数组。通过共用体变量 data,我们可以分别存储和访问不同类型的数据。

需要注意的是,共用体在同时存储多个成员时可能会导致数据的混乱,因此在使用共用体时需要小心谨慎。

希望以上信息能够解答你的问题。如果有任何进一步的疑问,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-29 15:57:55 | 显示全部楼层
在C语言中,结构体(struct)和共用体(union)是两种非常有用的数据类型。

结构体可以用来组织和封装一组相关的数据项,类似于Python中的字典或对象。它可以将多个变量打包成一个单独的组合类型,方便对其进行操作和传递。举个例子,如果你需要存储一个学生的信息,如姓名、年龄、成绩等,你可以使用结构体来表示这个学生,如下所示:

  1. struct student {
  2.     char name[20];
  3.     int age;
  4.     float score;
  5. };
复制代码


通过定义这个结构体,我们可以轻松地创建一个包含学生信息的变量,并对其进行操作:

  1. struct student stu1 = {"Tom", 18, 85.5};
  2. printf("Name: %s\nAge: %d\nScore: %.2f\n", stu1.name, stu1.age, stu1.score);
复制代码


共用体则可以让你在同一内存空间中存储不同类型的数据,节省内存并提高程序效率。共用体与结构体类似,只是其不同成员共享同一块内存空间。在任何时刻,共用体中只能有一个成员是有效的,因为对一个成员的更新会覆盖其他成员的值。举个例子,以下是一个可以表示一个整数、浮点数和字符的共用体:

  1. union data {
  2.     int i;
  3.     float f;
  4.     char c;
  5. };
复制代码


使用共用体可以让你在不同的数据类型之间切换,且只有一个变量占用内存,可以更加高效地管理数据。但是需要注意,共用体的设计和使用都比较复杂,需要谨慎使用,以防出现不可预料的错误。

希望这些解释可以帮助你理解结构体和共用体的作用与用途。如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-29 15:58:19 | 显示全部楼层
isdkz 发表于 2023-9-29 15:57
结构体是一种自定义的数据类型,可以将不同类型的数据组合在一起,形成一个新的数据类型。通过结构体,可以 ...
需要注意的是,共用体的不同成员之间是共享同一块内存空间的,因此对一个成员的修改会影响到其他成员的值。
那共用体有什么用?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-29 16:01:44 | 显示全部楼层
陶远航 发表于 2023-9-29 15:57
在C语言中,结构体(struct)和共用体(union)是两种非常有用的数据类型。

结构体可以用来组织和封装一组相 ...

封装?为什么这结构体这么像python的对象?我可以把函数放里面吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-29 16:03:01 | 显示全部楼层
风眠 发表于 2023-9-29 13:01
封装?为什么这结构体这么像python的对象?我可以把函数放里面吗?

https://blog.csdn.net/hml111666/article/details/122650850
和python函数和类很相似
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-29 16:04:04 | 显示全部楼层    本楼为最佳答案   
风眠 发表于 2023-9-29 13:01
封装?为什么这结构体这么像python的对象?我可以把函数放里面吗?

C++中的结构体(struct)用于封装一组相关的数据成员,类似于对象。Python中的对象也具有封装数据成员的特性,所以结构体在某种程度上与Python的对象相似。

结构体可以包含数据成员和函数成员,称为成员变量和成员函数。函数成员可以被放在结构体内部,但它们默认是公有的。这使得结构体在一定程度上与类相似。但与类不同的是,结构体的成员默认是公有的,而类的成员默认是私有的。

下面是一个示例:


  1. #include <iostream>
  2. using namespace std;

  3. struct Person {
  4.     string name;
  5.     int age;

  6.     void printInfo() {
  7.         cout << "Name: " << name << endl;
  8.         cout << "Age: " << age << endl;
  9.     }
  10. };

  11. int main() {
  12.     Person person1;
  13.     person1.name = "Alice";
  14.     person1.age = 25;

  15.     person1.printInfo();

  16.     return 0;
  17. }
复制代码


在这个例子中,我们定义了一个名为Person的结构体,它有两个成员变量:name和age,以及一个成员函数printInfo。成员函数printInfo用于打印结构体的信息。

在主程序中,我们创建了一个Person类型的对象person1,并设置其成员变量name和age的值。然后通过调用成员函数printInfo来输出person1的信息。

结构体的函数成员和数据成员都可以通过对象进行访问。需要注意的是,默认情况下,结构体的函数成员和数据成员都是公有的,因此可以通过对象直接访问它们。但与类不同,结构体没有默认的私有成员访问权限。

希望这个例子对你有所帮助。如果你还有其他问题,请随时提问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-29 16:04:05 | 显示全部楼层
Mike_python小 发表于 2023-9-29 16:03
https://blog.csdn.net/hml111666/article/details/122650850
和python函数和类很相似

这不C++的吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-29 16:04:45 | 显示全部楼层

都差不多,我给你找个C的https://zhuanlan.zhihu.com/p/520770506?utm_id=0
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-29 16:05:39 | 显示全部楼层
Mike_python小 发表于 2023-9-29 16:04
都差不多,我给你找个C的https://zhuanlan.zhihu.com/p/520770506?utm_id=0

谢了

评分

参与人数 1荣誉 +1 收起 理由
Mike_python小 + 1 给个最佳被

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-29 16:06:12 | 显示全部楼层
Mike_python小 发表于 2023-9-29 16:04
都差不多,我给你找个C的https://zhuanlan.zhihu.com/p/520770506?utm_id=0

对了为什么C++和C这么像?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-29 16:06:57 | 显示全部楼层
风眠 发表于 2023-9-29 13:06
对了为什么C++和C这么像?

C++就是基于C写出来的
一个爹一个儿子,能不像吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-29 16:07:42 | 显示全部楼层
Mike_python小 发表于 2023-9-29 16:06
C++就是基于C写出来的
一个爹一个儿子,能不像吗

哦,那C的代码在C++上能跑吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-29 16:08:50 | 显示全部楼层
风眠 发表于 2023-9-29 13:07
哦,那C的代码在C++上能跑吗?

一般来说小幅度改动后是可以的

评分

参与人数 1鱼币 +1 收起 理由
风眠 + 1 鱼C有你更精彩^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-29 16:10:28 | 显示全部楼层
Mike_python小 发表于 2023-9-29 16:08
一般来说小幅度改动后是可以的

好的,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 05:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表