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
如果复合文字出现在函数体外,则该对象具有静态存储持续时间; 否则,它具有与封闭块相关的自动存储持续时间.
是否可以声明一个指向结构的指针并对其进行初始化?
是的。
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)
归档时间: |
|
查看次数: |
31185 次 |
最近记录: |