【问题标题】:Jagged array implementation in C- error: expected ';' at the end of declaration listC-错误中的锯齿状数组实现:预期的';'在声明列表的末尾
【发布时间】:2019-04-15 21:02:04
【问题描述】:

我写了一段C代码如下:-

typedef struct {
    unsigned int buffer_ctrl[4];
    unsigned int buffer1[10];
    unsigned int buffer2[40];
    unsigned int buffer3[20];
    unsigned int buffer4[15];
    unsigned int *buffer_ptr[4] = {buffer1, buffer2, buffer3, buffer4};
    unsigned int canary[4];
} buffer_t;

我将它写在一个头文件中,该头文件包含在主代码中。我已经阅读了很多关于 C 中锯齿状数组的示例,并认为这可以正常工作。其中一个链接是Do jagged arrays exist in C/C++?

但是,当我编译时,我收到错误“expected ';'在声明 lsit 的末尾”。有人可以帮忙解释这里可能出现的错误吗? 谢谢!

【问题讨论】:

  • 它将除了unsigned int *buffer_ptr[4] = {buffer1, buffer2, buffer3, buffer4};——你不能在定义时初始化结构的成员。 (但您可以在 struct 中使用 union 来基本上做同样的事情)。
  • 在结构内部?我相信那是行不通的。
  • @DavidC.Rankin 你的意思是不能 - 对吧?
  • 是的,没错——你不能(意思是说所有都可以工作“除了”..)。
  • 请逐字复制粘贴错误信息。如果您输入错误消息,这对任何人都没有帮助!

标签: c jagged-arrays


【解决方案1】:

您不能在 buffer_t 结构本身的定义中分配给 buffer_ptr。您必须先定义一个buffer_t 类型的变量,然后再分配给它。

你可以这样做:

buffer_t bt = {
    .buffer_ptr[0] = bt.buffer1,
    .buffer_ptr[1] = bt.buffer2,
    .buffer_ptr[2] = bt.buffer3,
    .buffer_ptr[3] = bt.buffer4
};

【讨论】:

  • 不过,通常没有充分的理由永久存储一个易于计算的数组。需要的时候可以创建这样的数组,不需要的时候可以节省内存。
猜你喜欢
  • 2013-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多