我很难弄清楚如何初始化全局结构以用作链接列表。我已经尝试了几件事,但基本上我有以下方法:
#includes....
struct reuqest_struct
{
struct timeval request_time;
int type;
int accountNums[10];
int transAmounts[10];
struct request_struct *next;
struct request_struct *prev;
};
// global structs I want
struct request_struct head;
struct request_struct tail;
int main(int argc, char * argv[]){
head = {NULL, 5, NULL, NULL, tail, NULL};
tail = {NULL, 5, NULL, NULL, NULL, head};
}
void * processRequest(){
// Want to access the structs in here as well
}
我尝试以这种方式初始化它们,但得到
“错误:“ {”令牌之前的预期表达
错误:“ head”类型不完整
错误:“ {”令牌之前的预期表达式
错误:“尾巴”的类型不完整”
有什么办法可以正确地做到这一点?
另外,我将在许多线程中访问此全局结构的链接列表。因此,我是否正确地认为,只要上一个或下一个引用了request_struct的头和尾,它们就可以访问吗?
谢谢
最佳答案
仅供参考:创建它们时,您已经初始化了它们(0
)。
现在,您要为其分配一个值。
对于C89
int main(int argc, char **argv) {
head.request_time.tv_sec = 42;
head.request_time.tv_usec = 0;
head.type = 5;
head.accountNums[0] = 0;
head.accountNums[1] = 1;
// ...
head.accountNums[9] = 9;
head.transAmounts[0] = 0;
// ...
head.transAmounts[9] = 9;
head.next = tail;
head.prev = NULL;
// same thing for tail
}
对于C99,有一个快捷方式:
int main(int argc, char **argv) {
head = (struct request_struct){{42, 0}, 5,
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, tail, NULL};
}