在pthread_creation调用的函数中访问struct变量的正确方法是什么。这就是我想要做的事情
void *add_first_quat(void *a){
struct thread1Struct *myArray = (struct thread1Struct *)a;
int i ;
for(i= *myArray>start; i < *myArray>end; i++){
sum+= *myArray>th1Array[i];
}
/* the function must return something - NULL will do */
return NULL;
}
在我的结构中,我定义了两个变量和指向全局定义数组的指针
struct thread1Struct{
int start = 0;
int end = 25;
int *th1Array = myArray;
};
这就是我调用pthread_create函数的方法
(pthread_create(&inc_first_quater_thread, NULL, add_first_quat, (void*) &th1StrObj))
为什么我的代码不起作用?我收到了以下错误
main.c: In function ‘add_first_quat’:
main.c:14:9: error: dereferencing pointer to incomplete type
for(i= *myArray>start; i < *myArray>end; i++){
^
main.c:14:18: error: ‘start’ undeclared (first use in this function)
for(i= *myArray>start; i < *myArray>end; i++){
^
main.c:14:18: note: each undeclared identifier is reported only once for each function it appears in
main.c:14:29: error: dereferencing pointer to incomplete type
for(i= *myArray>start; i < *myArray>end; i++){
^
main.c:14:38: error: ‘end’ undeclared (first use in this function)
for(i= *myArray>start; i < *myArray>end; i++){
^
main.c:15:9: error: dereferencing pointer to incomplete type
sum+= *myArray>th1Array[i];
^
main.c:15:18: error: ‘th1Array’ undeclared (first use in this function)
sum+= *myArray>th1Array[i];
^
main.c: At top level:
main.c:34:12: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token
int start = 0;
^
答案 0 :(得分:2)
第一个问题(语法):
尝试myArray->start
或(*myArray).start
或myArray[0].start
。在这种情况下,第一种语法是我的偏好。
第二个问题:
dereferencing pointer to incomplete type
您需要在引用任何字段之前提供完整声明。
通过将结构的完整声明移动到代码文件的顶部来解决问题,或者将它放在.h
文件中,使用该结构的所有源文件中#include
。
答案 1 :(得分:1)
这:*myArray>start
不是访问指向结构的指针成员的正确语法。
您可以执行此操作:(*myArray).start
,取消引用指针,使*myArray
的类型为struct thread1Struct
,然后使用.
进行成员访问。
首选方法是myArray->start
,其中->
运算符对成员的指针进行成员访问。
答案 2 :(得分:1)
问题在于您访问结构元素的方式。您的表达式*myArray>start
对编译器没有意义。如您所知,myArray
是指向struct
的指针。您可以通过两种方式访问数据成员:
(*myArray).start
)myArray->start
)这是您访问任何结构指针的数据成员的方法。它不仅仅与p线程有关。