【发布时间】:2015-10-27 18:36:46
【问题描述】:
假设我有以下结构。
struct Vector3{
double Values[3];
};
我知道我可以这样做:
struct Vector3 v1;
v1.Values[0] = -1;
printf("%f", vi.Values[0]);
它会工作得很好。我不必 malloc/calloc .Values。 使用 -c99 -Wall 编译不会给我任何警告。 但我对这种结构有疑问。
在这种情况下,v1 是一个局部变量:
- .Values 的“双精度值”分配在堆栈还是堆上?
- 如果它们是在堆上分配的,这段代码是否保证 总是工作?还是依赖于编译器?
如果有这个其他结构
struct Triplet{
double First;
double Second;
double Third;
};
我可以将 Vector3 的内容“memcpy”到 Triplet 吗?
最后但同样重要的是,这个结构呢?和 Vector3 的规则一样吗?
struct Matrix3{
double Values[3][3];
};
【问题讨论】:
-
除非您执行“malloc”,否则在这种情况下,所有内容都分配在堆栈上。检查结构的大小。
-
也许指针和数组的相似性让你感到困惑。数组不是指针 - 您的
Vector3与您的Triplet非常相似,并且与指针完全不同 - 所以不需要malloc等。 -
@anatolyg:这基本上就是我要说的。建议阅读:comp.lang.c FAQ 的第 6 节。
-
@anatolyg 可以真正解释这个问题,所以我决定在我的回答中详细说明一下。