struct结构体问题

img


像这种的struct结构体问题,什么时候交换里面结构体成员什么时候结构体成员不变呐?很迷,求解

改变形参不影响实参
那么直接对t赋值就不会改变实参
而如果是修改t的成员,改变的是实参

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/1011493
  • 这篇博客你也可以参考下:struct结构体里能放函数吗?
  • 除此之外, 这篇博客: 结构体struct的定义和使用中的 🍊3、定义结构体的时候缺失结构体名,同时定义结构体变量 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • struct {
        int a;
        int b;
    }type_three1,type_three2;
    

    这种形式只能使用在定义结构体的同时定义的结构体变量type_three1type_three2,由于没有结构体名,因此后续不可以再定义新的结构体变量。

  • 您还可以看一下 Abel小智老师的嵌入式开发系统学习路线 从基础到项目 精品教程 工程师必备课程 物联网课程中的 学会使用struct关键词小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    结合参考资料,可以给出以下回答:

    结构体的成员交换与不交换与三个方面有关:

    1. 需不需要对内存空间进行优化

    如果需要进行优化,可以让占用空间小的成员尽量集中在一起,可以通过交换结构体成员的顺序来实现。比如下面的结构体:

    struct S1
    {
     char c1;
     int i;
     char c2;
    };
    

    可以将其优化为:

    struct S2
    {
     char c1;
     char c2;
     int i;
    };
    
    1. 需不需要保证数据的不变性和稳定性

    如果需要保证数据的不变性和稳定性,就需要保持结构体成员的顺序不变。这样可以保证程序的正确性和稳定性。

    1. 结构体成员的类型

    如果结构体成员是构造类型,应该在定义时初始化。而如果是基本数据类型,可以定义时初始化,也可以先定义再赋值。如果需要在定义后修改结构体成员,只能单个成员变量赋值,而不能整体赋值。需要注意的是,结构体传参的时候,要传结构体的地址。

    关于结构体的声明和创建,可以按照以下格式:

    //结构体的声明
    struct target  
    {
        member-list;
    };
    
    //结构体变量的创建
    struct Stu
    {
        //成员变量
        char name[20];
        int age;
        char sex[5];
        char id[20];
    };
    
    int main()
    {
        struct Stu s; //局部变量的创建
        return 0;
    }
    

    如果结构体中含有子结构体,需要特别注意空间计算。整体空间是子结构体与父结构体中占用空间最大的成员(的类型)所占字节数的整数倍,但是在一些环境下,可能需要按照特定的对齐原则进行空间计算。

    总的来说,结构体是一些值的集合,因此在设计时需要同时考虑空间利用和数据的正确性和稳定性等因素。