gpt4 book ai didi

c - 结构体和结构体指针之间的区别

转载 作者:行者123 更新时间:2023-11-30 19:51:49 25 4
gpt4 key购买 nike

我试图理解结构体和作为指针的结构体之间的区别。以下是代码示例。

代码示例:

 #include<stdio.h>
typedef struct{
const char *description;
float value;
} swag;

typedef struct{
swag *swag;
} combination;

正如你所看到的,这里有两个结构体,组合。结构组合有一个指向结构 swag 的指针。为什么我们不能做这样的事情:

 typedef struct{
swag swag;
} combination;

为什么一定是这个swag *swag。有人可以解释一下这两个代码示例之间的区别吗?

最佳答案

两者都有可能,这就是它们在内存中的显示方式:

案例1

     +----+-----+----------+  +->|    p     |   value  |      struct swag  |  +----------+----------+  |  const char*    float  |  |  +----------+  +--+   swag   |                 struct combination     +----------+         swag*

案例2

    +-----------------------+    |+----+-----+----------+|    ||    p     |   value  ||     struct combination    |+----------+----------+|    +-----------------------+

情况 1 的优点是,当没有数据时,swag* 可能会指向 NULL,否则它可能会指向某个已分配的结构。而在情况 2 中,它总是需要为完整的 swag 结构提供空间。

但是,情况 2 的优点是不会出现特定于为 swag 结构分配和释放空间的内存管理问题,因为它始终存在。情况 2 可能更适合引用局部性,因为没有指向取消引用的指针并且破坏了缓存一致性。当两种情况都保存数据时,情况 2 的总空间会更小;情况1:sizeof(swag) + sizeof(swag*);情况 2:sizeof(swag)

关于c - 结构体和结构体指针之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35691598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com