(C语言)为啥我这样调用线程里的结构体参数会报错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(C语言)为啥我这样调用线程里的结构体参数会报错相关的知识,希望对你有一定的参考价值。

struct test

long b[NUM];
long lleft;
long rright;
;
unsigned __stdcall FirstThreadFunc(void*arg)

int left=first->lleft;
int right=first->rright;
fun(b,left,right);


int main()


a数组之前已经设好

unsigned threadID[4];
struct text first;
first.b=a;
first.lleft=0;
first.rright=c1-1;
hThread[0]=(HANDLE)_beginthreadex(NULL,0,FirstThreadFunc,(void*)&first,0,&threadID[0]);

很多东西我省略了,就是不明白为什么会一直提示我
error C2065: 'first' : undeclared identifier
left of '->lleft' must point to class/struct/union
left of '->rright' must point to class/struct/union
诸如此类很多。。。
到底该改哪里?各位老师麻烦指导下,谢谢!!

参考技术A 没有吧void*类型转化成struct text*类型追问

所以括号里面到底怎么填写?

追答

加上这一行struct text*first = (struct text*)arg;
int left=first->lleft;
还有,text和test不一样,把它们弄成一样

c语言结构体初始化

我用的是vs2010,按照谭浩强书里的page--297,页,说是可以有:strcut student b =.name="zhang fang";这种初始化形式啊,这里为什么会出错呢?

这个结构体中包含三个变量,num name[20] c
你的结构体初始化只初始化了 name[20]
其余俩个变量没有初始化,所以会报错
你可以这样初始化 struct wo b(1,"jack",'M');
要注意对结构体中所有变量都要初始化,除非这个变量有缺省值追问

为什么都必须初始化,谭浩强说C99标准允许对某一成员初始化,什么是缺省值?

追答

对某一成员初始化 是这样的对某一成员 比如
你的例子不是struct wo b;
b.name="jack";
b.num=23;
这样是可以对某一成员赋值的
但你的赋值是对整体赋值,你想一想你的定义struct wo b(,"jack",);
另外两个变量怎么办! 除非你定义结构体的时候如下定义
struct wo

int num=0; //这就是缺省值
char name[20]="jack";
char c; //这个就没有缺省值,懂了吧

参考技术A 没有吧,我怎么没见过,结构体赋值:struct wo b=10,"aaaa",'b';或是b.num=10;没见过你写的那样 参考技术B 这是c99的语法,你的编译器可能不支持c99或你没有打开相应的编译选项

以上是关于(C语言)为啥我这样调用线程里的结构体参数会报错的主要内容,如果未能解决你的问题,请参考以下文章

C语言结构体数组 的输入方式

(C语言)多线程beginthreadex的第四个参数(结构体)到底怎么设置才能正确传递数值

C语言结构体里的结构体怎么初始化

用 结构体地址 调用 结构体中元素 非常慢的问题,怎么解决?但就C语言,不说引用

C语言结构体里面为啥不能定义一个位?最小只能定义到char

C语言中,结构体作为函数参数传递,详解?