【发布时间】:2014-12-16 20:03:31
【问题描述】:
我是结构的新手,我正在尝试做一些教程,看看我是否很好地理解了我所学的内容。这是我写的代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct variables{
float Vx;
float Vy;
float Vz;
}velocity;
int main(){
velocity *pv;
pv = (velocity*)malloc(sizeof(velocity));
pv[0].Vx = 1;
pv[0].Vy = 2;
pv[0].Vz = 3;
free(pv);
return 0;
}
所以我的问题是 2:
我是否以正确的方式分配了三个变量?
既然我使用的是数组表示法,我为什么要写
[0]而不是[1]或[2]等等?
【问题讨论】:
-
数组下标符号在这里具有误导性。我建议您改用
pv->Vx = 1等。也不要投射malloc的返回值,除非你有强烈的这样做的冲动,否则不要使用typedef'ing 你的structs。哦,然后检查malloc是成功还是返回NULL。 -
@5gon12eder 你反对 typedefing 结构的理由是什么?
-
@2501 它增加了额外的复杂性/混乱,没有真正的好处。在上面的例子中,为什么
struct velocity可以使用variables和velocity这两个名字呢?我也不喜欢通过将struct隐藏在typedef中来模糊程序的语义。 -
@5gon12eder 它是如何增加混乱或复杂性的。你要么有一个结构类型,要么有一个类型。只用一个。 在上面的例子中,为什么有两个名字 variables 和 velocity 而 struct velocity 就可以了? 我不明白这部分。没有结构前缀的
velocity与struct velocity完全相同,只是您不必键入struct。更少的文字输入减少了“复杂性”。 -
@2501 您遇到了 C 的主要风格争论之一。每个程序员都会非常强烈地考虑是否应该对结构进行 typedef。他们只是不会都同意。