gpt4 book ai didi

c - 结构中的数组分配在哪里?

转载 作者:行者123 更新时间:2023-12-04 11:08:39 24 4
gpt4 key购买 nike

假设我有以下结构。

struct Vector3{
double Values[3];
};

我知道我可以做类似的事情:

struct Vector3 v1;
v1.Values[0] = -1;
printf("%f", vi.Values[0]);

它会工作得很好。我不必 malloc/calloc .Values。使用 -c99 -Wall 编译没有给我任何警告。但我对这种结构有疑问。

在这种情况下,v1 是局部变量:

  • .Values 的“ double ”是分配在栈上还是堆上?
  • 如果它们分配在堆上,这段代码是否保证总是工作?还是依赖于编译器?

如果有这个其他结构

struct Triplet{
double First;
double Second;
double Third;
};

我可以将 Vector3 的内容“memcpy”到 Triplet 吗?

最后但同样重要的是,这个结构体呢?和 Vector3 一样的规则?

struct Matrix3{
double Values[3][3];
};

最佳答案

Where are arrays in structs Allocated

结构本身被分配的相同位置,根据您如何实例化结构,在堆栈或堆上。

struct Vector3 v1;

在堆栈上分配 Vector3 所需的所有内存。

Could I "memcpy" the contents of a Vector3 to a Triplet?

这取决于结构在您的目标平台上的打包方式以及您的编译器设置和可能影响打包的#pragma。没有一般保证您可以 memcopy 数据。它可以在某些 平台上运行,然后在其他平台上可能会失败。

关于c - 结构中的数组分配在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33375972/

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