鉴于此结构:

struct PipeShm
{
    int init;
    int flag;
    sem_t *mutex;
    char * ptr1;
    char * ptr2;
    int status1;
    int status2;
    int semaphoreFlag;

};


很好用:

static struct PipeShm myPipe = { .init = 0 , .flag = FALSE , .mutex = NULL ,
        .ptr1 = NULL , .ptr2 = NULL , .status1 = -10 , .status2 = -10 ,
        .semaphoreFlag = FALSE };


但是,当我声明static struct PipeShm * myPipe时,这是行不通的,我假设我需要使用运算符->进行初始化,但是如何?

static struct PipeShm * myPipe = {.init = 0 , .flag = FALSE , .mutex = NULL ,
        .ptr1 = NULL , .ptr2 = NULL , .status1 = -10 , .status2 = -10 ,
        .semaphoreFlag = FALSE };


是否可以声明一个指向结构的指针并对其进行初始化?

最佳答案

您可以这样做:

static struct PipeShm * myPipe = &(struct PipeShm) {
    .init = 0,
    /* ... */
};


此功能称为“复合文字”,由于您已经在使用C99指定的初始化程序,因此它应该对您有用。



关于复合文字的存储:


  6.5.2.5-5
  
  如果复合文字出现在函数主体之外,则
  对象具有静态存储期限;否则,它会自动
  与封闭块关联的存储持续时间。

08-04 14:59