如何在C中初始化指向结构的指针?

JAN*_*JAN 22 c struct pointers initialization

鉴于此结构:

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

};
Run Code Online (Sandbox Code Playgroud)

这工作正常:

static struct PipeShm myPipe = { .init = 0 , .flag = FALSE , .mutex = NULL , 
        .ptr1 = NULL , .ptr2 = NULL , .status1 = -10 , .status2 = -10 , 
        .semaphoreFlag = FALSE };
Run Code Online (Sandbox Code Playgroud)

但是当我宣布static struct PipeShm * myPipe,这不起作用时,我假设我需要用运算符初始化->,但是如何?

static struct PipeShm * myPipe = {.init = 0 , .flag = FALSE , .mutex = NULL , 
        .ptr1 = NULL , .ptr2 = NULL , .status1 = -10 , .status2 = -10 , 
        .semaphoreFlag = FALSE };
Run Code Online (Sandbox Code Playgroud)

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

cni*_*tar 44

你可以这样做:

static struct PipeShm * myPipe = &(struct PipeShm) {
    .init = 0,
    /* ... */
};
Run Code Online (Sandbox Code Playgroud)

此功能称为"复合文字",它应该适用于您,因为您已经使用了C99指定的初始值设定项.


关于复合文字的存储:

6.5.2.5-5

如果复合文字出现在函数体外,则该对象具有静态存储持续时间; 否则,它具有与封闭块相关的自动存储持续时间.

  • @Jay*此对象的存储是静态的(如果复合文字出现在文件范围内)或自动(如果复合文字出现在块范围内),并且存储持续时间与其直接封闭块相关联* (2认同)

Bri*_*ain 5

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

是的。

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

static struct PipeShm * const myPipe = malloc(sizeof(struct PipeShm));
*myPipe = PIPE_DEFAULT;
Run Code Online (Sandbox Code Playgroud)