如何初始化的指针在C结构?(How to initialize a pointer to a str

2019-06-26 14:55发布

鉴于这种结构:

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 };

是否有可能宣布一个指向与它结构和使用初始化?

Answer 1:

你可以做到这一点,如下所示:

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

该功能被称为“复合文字”,它应该,因为你已经在使用C99指定初始化为你工作。


关于复合文字的存储:

6.5.2.5-5

如果化合物字面发生功能的主体外部,该对象具有静态存储持续时间; 否则,它具有与所述封闭块相关联的自动存储持续时间。



Answer 2:

是否有可能宣布一个指向与它结构和使用初始化?

是。

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;


Answer 3:

首先,你需要为指针如下分配内存:

myPipe = malloc(sizeof(struct PipeShm));

然后,您应该指定值逐一如下:

myPipe->init = 0;
myPipe->flag = FALSE;
....

请注意,结构内的每个单独的指针,你需要seperately分配内存。



Answer 4:

好吧,我明白了:

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

static struct PipeShm  * myPipe = &myPipeSt;


Answer 5:

首先初始化结构( static struct PipeShm myPipe = {... )。 再取地址

struct PipeShm * pMyPipe = &myPipe;


Answer 6:

你必须建立由专人该结构,然后进行指着一个指针。

static struct PipeShm myPipe ={};
static struct PipeShm *pmyPipe = &myPipe;

要么

static struct PipeShm *myPipe = malloc();
myPipe->field = value;


文章来源: How to initialize a pointer to a struct in C?