创建一个结构数组

时间:2013-03-21 07:26:36

标签: c struct

所以我试图修改一些代码,我需要创建一个struct的数组。结构声明如下:

typedef struct header
{
    int sample_rate;
    int num_channels;
    int bit_res;
    int num_samples;
    char *data;
} header;

typedef struct header* header_p;

创建和使用此结构数组的正确方法是什么?我正在尝试以下方面:

header_p fileHeader;
...
fileHeader = (header_p)malloc(sizeof(header) * (argc-1));

这似乎有效,但我不确定如何正确访问数组。

编辑:(我的一些问题不知何故被砍掉了) 当我尝试像这样访问数组时:

  

fileHeader [0] =返回header_p;

的函数

我收到以下编译错误:

incompatible types when assigning to type ‘struct header’ from type ‘header_p’
编辑:(想出来) 在遵循Lundins的建议去除隐藏结构指针的愚蠢的typedef后,它变得更容易看到发生了什么。然后更容易看出亚历克斯是否正确需要取消引用我的指针。我将接受亚历克斯的回答,因为从技术上讲这是我的问题。

3 个答案:

答案 0 :(得分:2)

  

创建和使用此结构数组的正确方法是什么?

header* fileHeader;

fileHeader = malloc(sizeof(header) * (argc-1));
  • 指针typedef没有意义,使你的程序不可读。
  • 转换malloc的结果没有意义。
  • 您已根据需要分配sizeof(header)*参数数量,然后分配-1 byte 而不是-1 参数。观察运营商优先级。这是一个错误,你分配的内存太多了。

答案 1 :(得分:1)

下面:

fileHeader[0] = function that returns header_p;

你忘了指针取消引用。

fileHeader[0] = *function_returning_header_p();

答案 2 :(得分:0)

你可以像这样访问它:

fileHeader[0].bit_res     = ...
fileHeader[1].num_samples = ...

因为它是一个指针,所以你在[]的索引处使用它。然后,您使用.访问成员。