在函数pthread中访问struct变量

时间:2015-10-09 12:22:26

标签: c arrays struct pthreads

在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;
            ^

3 个答案:

答案 0 :(得分:2)

第一个问题(语法):

尝试myArray->start(*myArray).startmyArray[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的指针。您可以通过两种方式访问​​数据成员:

  1. 您可以使用间接运算符(例如(*myArray).start
  2. 您可以使用箭头操作符(例如myArray->start
  3. 这是您访问任何结构指针的数据成员的方法。它不仅仅与p线程有关。