gpt4 book ai didi

c - 在 C 中初始化结构数组

转载 作者:太空宇宙 更新时间:2023-11-04 05:53:17 25 4
gpt4 key购买 nike

我有以下结构

typedef struct {
int buf[BUF_SIZE]; // the buffer
size_t len; // number of items in the buffer
pthread_mutex_t mutex; // needed to add/remove data from the buffer
pthread_cond_t can_produce; // signaled when items are removed
pthread_cond_t can_consume; // signaled when items are added
};

最初我只是简单地初始化如下

buffer_t buffer = {
.len = 0,
.mutex = PTHREAD_MUTEX_INITIALIZER,
.can_produce = PTHREAD_COND_INITIALIZER,
.can_consume = PTHREAD_COND_INITIALIZER
};

虽然我想用这些值初始化一个 buffer_t 数组,但我不太确定如何正确地执行它。

有点像

buffer_t buffer[NUM_ARRAY] = {
.len = 0,
.mutex = PTHREAD_MUTEX_INITIALIZER,
.can_produce = PTHREAD_COND_INITIALIZER,
.can_consume = PTHREAD_COND_INITIALIZER
};

(我意识到这是不正确的)

编辑:我最终使用了

buffer_t buffers[NUM_THREADS];

for (i = 0, i < 3, i ++) {
buffers[i] = (buffer_t) {
.len = 0,
.mutex = PTHREAD_MUTEX_INITIALIZER,
.can_produce = PTHREAD_COND_INITIALIZER,
.can_consume = PTHREAD_COND_INITIALIZER
};
}

最佳答案

如果 NUM_ARRAY 不是太大,您可以这样做:

#define NUM_ARRAY 3

buffer_t buffer[NUM_ARRAY] = {
{ {0}, 0, PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER},
{ {0}, 0, PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER},
{ {0}, 0, PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER}
};

或者您可以像这样显式编码:

buffer_t buffer[NUM_ARRAY];
int i;
for (i=0; i<NUM_ARRAY; i++) {
memset(buffer[i].buf, 0, sizeof(buffer[i].buf));
buffer[i].len = 0;
buffer[i].mutex = PTHREAD_MUTEX_INITIALIZER;
buffer[i].can_produce = PTHREAD_COND_INITIALIZER;
buffer[i].can_consume = PTHREAD_COND_INITIALIZER;
}

编辑:

所以看起来 PTHREAD_MUTEX_INITIALIZERPTHREAD_COND_INITIALIZER 宏不能用在这样的赋值中,因为它只能用于初始化并且包含 {} 个字符。

所以你需要像其他人建议的那样使用初始化语法:

buffer_t buffer[NUM_ARRAY];
int i;
for (i=0; i<NUM_ARRAY; i++) {
buffer[i] = (buffer_t) {
0, 0, PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER
};
}

关于c - 在 C 中初始化结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34089531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com