鱼C论坛

 找回密码
 立即注册
查看: 1087|回复: 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的对象相似。

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

下面是一个示例:
#include <iostream>
using namespace std;

struct Person {
    string name;
    int age;

    void printInfo() {
        cout << "Name: " << name << endl;
        cout << "Age: " << age << endl;
    }
};

int main() {
    Person person1;
    person1.name = "Alice";
    person1.age = 25;

    person1.printInfo();

    return 0;
}

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

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

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

希望这个例子对你有所帮助。如果你还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

举个例子,假设我们要表示一个点的坐标,可以使用结构体来定义:
struct Point {
    int x;
    int y;
};

这样,我们就可以定义一个Point类型的变量,来表示一个点的坐标:
struct Point p;
p.x = 10;
p.y = 20;

而如果我们使用共用体来定义一个32位整数和一个浮点数的变量,可以这样写:
union Number {
    int i;
    float f;
};

union Number n;
n.i = 123;
printf("%d\n", n.i);   // 输出 123
printf("%f\n", n.f);   // 输出一个未定义的浮点数值
n.f = 1.23;
printf("%d\n", n.i);   // 输出一个未定义的整数值
printf("%f\n", n.f);   // 输出 1.23

需要注意的是,共用体的不同成员之间是共享同一块内存空间的,因此对一个成员的修改会影响到其他成员的值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

以下是一个示例代码,展示了如何定义和使用结构体:
#include <stdio.h>// 定义一个表示学生的结构体struct Student {    int id;    char name[20];    float score;};int main() {    // 创建结构体变量    struct Student student1;    // 访问结构体的成员变量,并赋值    student1.id = 1001;    strcpy(student1.name, "John");    student1.score = 85.5;    // 打印结构体的内容    printf("Student ID: %d\n", student1.id);    printf("Student Name: %s\n", student1.name);    printf("Student Score: %.2f\n", student1.score);    return 0;}
以上代码中,我们定义了一个名为 Student 的结构体,其中包含了学生的学号、姓名和分数。通过创建结构体变量 student1,我们可以访问和操作其成员变量。

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

以下是一个示例代码,展示了如何定义和使用共用体:
#include <stdio.h>// 定义一个共用体union Data {    int i;    float f;    char str[20];};int main() {    // 创建共用体变量    union Data data;    // 赋值并打印整型数据    data.i = 10;    printf("Data as integer: %d\n", data.i);    // 赋值并打印浮点型数据    data.f = 3.14;    printf("Data as float: %.2f\n", data.f);    // 赋值并打印字符串数据    strcpy(data.str, "Hello");    printf("Data as string: %s\n", data.str);    return 0;}
以上代码中,我们定义了一个名为 Data 的共用体,其中包含了整型、浮点型和字符数组。通过共用体变量 data,我们可以分别存储和访问不同类型的数据。

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

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

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

通过定义这个结构体,我们可以轻松地创建一个包含学生信息的变量,并对其进行操作:
struct student stu1 = {"Tom", 18, 85.5};
printf("Name: %s\nAge: %d\nScore: %.2f\n", stu1.name, stu1.age, stu1.score);

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

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

希望这些解释可以帮助你理解结构体和共用体的作用与用途。如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

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

封装?为什么这结构体这么像python的对象?我可以把函数放里面吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

https://blog.csdn.net/hml111666/article/details/122650850
和python函数和类很相似
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

下面是一个示例:
#include <iostream>
using namespace std;

struct Person {
    string name;
    int age;

    void printInfo() {
        cout << "Name: " << name << endl;
        cout << "Age: " << age << endl;
    }
};

int main() {
    Person person1;
    person1.name = "Alice";
    person1.age = 25;

    person1.printInfo();

    return 0;
}

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

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

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

希望这个例子对你有所帮助。如果你还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> 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++的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

都差不多,我给你找个C的https://zhuanlan.zhihu.com/p/520770506?utm_id=0
想知道小甲鱼最近在做啥?请访问 -> 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 给个最佳被

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> 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这么像?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

C++就是基于C写出来的
一个爹一个儿子,能不像吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

哦,那C的代码在C++上能跑吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

好的,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-6 01:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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