【问题标题】:Instantiating a list of structs in C在 C 中实例化结构列表
【发布时间】:2011-11-01 19:47:27
【问题描述】:

我确定以前一定有人问过这个问题,但我似乎无法在任何地方找到答案。我在头文件中定义了一个结构,如下所示:

struct lock {
    char *name;
    // add what you need here
    void *holder;
    // (don't forget to mark things volatile as needed)
};

我想制作一个锁对象列表。这样我就可以这样说:

lock_list[0] = create_lock();
lock_list[1] = create_lock();

我尝试了不同的方法,但它们都给了我错误。我想我可以简单地说:

lock[2] lock_list;

但它没有工作。任何帮助将不胜感激。

【问题讨论】:

  • 尝试锁定 lock_list[2];或 struct lock lock_list[2];

标签: c arrays multithreading coding-style struct


【解决方案1】:

如果create_lock() 返回一个指向lock 的指针,那么以下应该可以工作:

lock *lock_list[2];

另外,由于您没有发布它,如果您希望在使用时能够省略struct 部分,则需要typedef 您的struct

typedef struct lock lock;

【讨论】:

  • 我没有看到 typedef。也许他需要struct lock *lock_list[2]。 (或者,可能是struct lock lock_list[2],取决于create_lock 的返回类型。)
  • @Rob 是的,我刚刚注意到了。我会尝试 'struct lock* lock_list[2]' 。感谢您的快速回复
【解决方案2】:

如果不是固定大小,可以生成链表:

typedef struct lock_t lock;
typedef struct lockList_t lockList;

struct lock_t {
    char *name;
    void *holder;
}

struct lockList_t {
    lock lock_entry;
    lockList *lock_next;
}

然后您可以使用 lockList 的实例来存储动态大小的锁列表。

【讨论】:

  • thanx 我会记住这一点,但现在它是一个恒定的长度 4。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多