gpt4 book ai didi

c - 将结构作为 void* 指针传递时初始化程序无效

转载 作者:行者123 更新时间:2023-11-30 18:50:15 26 4
gpt4 key购买 nike

我试图将一个结构传递给一个函数,以便利用 C 中的多线程。我不太明白它是如何工作的,所以我只是尝试了各种给出各种错误消息的语法,所以我不确定我的特定查询之前是否已得到解答。我将最简单的代码放在一起,类似于我想要做的事情,但它仍然给我一个错误,即使我将其设置为匹配该网站上显然对人们有用的类似示例。我希望我只是错过了一些非常简单的事情。无论如何,这是无法编译的代码:

#include <pthread.h>
#include <stdio.h>

typedef struct {
int i_start;
int i_end;
} my_struct;

void *func(void *ptr) {

int j_start;
int j_end;

my_struct input = (my_struct *) ptr;
j_start = input.i_start;
j_end = input.i_end;
printf("%d %d\n", j_start, j_end);

}

int main() {
my_struct qwerty;

qwerty.i_start = 0;
qwerty.i_end = 1;

pthread_t tid;

pthread_create(&tid, NULL, func, &qwerty);

return 0;
}

这个特定的代码给了我一个编译错误:

test.c: In function 'func':
test.c:14:20: error: invalid initializer
my_struct input = (my_struct *) ptr;

就像我说的,我尝试了一些不同的方法,但我无法做到正确。感谢您的帮助。

最佳答案

my_struct input = (my_struct *) ptr;

input 的类型是 my_struct,并且您尝试分配一个 my_struct * 值(指向 my_struct) 到它。类型必须匹配。

尝试使用指针类型并取消引用它(以获取简单的 my_struct 值):

my_struct *input = (my_struct *) ptr;
j_start = (*input).i_start;
j_end = (*input).i_end;

或者将指针本身与箭头运算符一起使用:

my_struct *input = (my_struct *) ptr;
j_start = input->i_start;
j_end = input->i_end;

或者您可以在赋值之前取消引用:

my_struct input = *((my_struct *) ptr);
j_start = input.i_start;
j_end = input.i_end;

此语法可能会令人困惑,因此请务必查看 * 运算符的工作原理以及它与变量类型中使用的 * 有何不同。

关于c - 将结构作为 void* 指针传递时初始化程序无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40516955/

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