0

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

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 之后,更容易看到发生了什么。然后更容易看出 Alex 关于取消引用我的指针的必要性是正确的。我将接受亚历克斯的回答,因为从技术上讲这是我的问题。

4

3 回答 3

2

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

header* fileHeader;

fileHeader = malloc(sizeof(header) * (argc-1));
  • 指针 typedef 没有意义,使您的程序不可读。
  • 强制转换 malloc 的结果没有意义。
  • 您分配了 sizeof(header) * 参数的数量,然后按预期分配了 -1字节而不是 -1参数。观察运算符优先级。这是一个错误,您分配了太多内存。
于 2013-03-21T07:38:44.263 回答
1

这里:

fileHeader[0] = function that returns header_p;

您忘记了指针取消引用。

fileHeader[0] = *function_returning_header_p();
于 2013-03-21T07:29:53.163 回答
0

您可以像这样访问它:

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

由于它是一个指针,因此您可以在索引处使用[]. 然后,您使用..

于 2013-03-21T07:29:26.680 回答