适合初学者的结构

时间:2014-12-16 20:03:32

标签: c struct structure

我是结构新手,我正在尝试做一些教程,看看我是否理解了我一直在学习的内容。这是我写的代码:

#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]左右?

3 个答案:

答案 0 :(得分:5)

回答第一个问题:是的,您的代码完全正确。 (你甚至free正确,我有点自豪!)

关于第二个问题,我有点不确定你的意思,但是当你打电话给malloc(N * sizeof(type))时,其中 N 是一个整数(在你的情况下,它只是{ {1}}),您实质上只是创建1 N 元素数组。因此,当{em> N = 1且typepv[0]等不存在时,pv[1]是此数组中的第一个也是唯一的元素。

但是,您应该使用语法pv[2]而不是pv->Vx

答案 1 :(得分:3)

您的代码是正确的,但您使用的语法有点奇怪。运算符[n]表示:获取指针的地址(在您的情况下为pv中的值),将其递增n,并取消引用它。由于您没有递增地址(n = 0),因此您可以取消引用它。您可以使用*pv或仅使用pv->执行此操作。分配多个结构时,只需要[]运算符,并希望将地址设置为其中一个结构。 pv[3]将与*(pv+3)相同。但是,如果要将指针用作数组,首先必须分配更多空间:

malloc(sizeof(velocity) * 4)

答案 2 :(得分:2)

  1. 是的,您以正确的方式使用了变量。

  2. 在您的代码中,您只为一个变量实例分配了内存。所以,如果你写pv[0].Vxpv->Vx,情况就一样。如果要为n个实例分配内存,可以使用pv[k].Vx,其中0<=k<=n-1

  3. SideNote:请do not cast malloc()的返回值。