我在C中看到了一些奇怪的东西?

时间:2016-05-21 13:38:21

标签: c multithreading

   typedef struct stage_tag {
   pthread_mutex_t     mutex;          /* Protect data */
    pthread_cond_t      avail;          /* Data available */
   pthread_cond_t      ready;          /* Ready for data */
   int                 data_ready;     /* Data present */
   long                data;           /* Data to process */
    pthread_t           thread;         /* Thread for stage */
   struct stage_tag    *next;          /* Next stage */
  } stage_t;

 typedef struct pipe_tag {
  pthread_mutex_t     mutex;          /* Mutex to protect pipe */
  stage_t             *head;          /* First stage */
  stage_t             *tail;          /* Final stage */
  int                 stages;         /* Number of stages */
  int                 active;         /* Active data elements */

} pipe_t;

  int pipe_create (pipe_t *pipe, int stages)
{
int pipe_index;
stage_t **link = &pipe->head, *new_stage, *stage;
int status;

..... //问题在于pipe_create方法。有一个类型为stage_t的双指针,它有三个值......这是什么样的声明?我真的很困惑。

2 个答案:

答案 0 :(得分:2)

单个声明语句可以声明多个类型相关的变量(在某种意义上它们仅通过限定而不同):

T **x, *y, z;

与:

相同
T **x;
T *y;
T z;

一个有点荒谬的例子:

int main(void)
{
    int a = 1, * const b = &a, * const * c = &b;
    return a + *b + **c;
}

答案 1 :(得分:0)

在这里,您将创建三个不同的变量。一个是stage_t **类型link变量,并将其初始化为& pipe-> head。第二个是stage_t *类型new_stage变量,第三个是stage_t *类型stage变量。最后两个变量未初始化。