如何初始化C中的结构指针?
问题描述:
鉴于这种结构:如何初始化C中的结构指针?
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
如果字面的化合物发生功能的主体之外,则 对象具有静态存储持续时间;否则,它具有与封闭块相关联的自动存储持续时间 。
答
首先,你需要为指针如下分配内存:
myPipe = malloc(sizeof(struct PipeShm));
然后,你应该通过一个如下赋值之一:
myPipe->init = 0;
myPipe->flag = FALSE;
....
请注意,每个人里面的指针结构,你需要分别分配内存。
答
首先初始化结构(static struct PipeShm myPipe = {...
)。再取地址
struct PipeShm * pMyPipe = &myPipe;
答
是否有可能宣布一个指向一个结构,然后使用初始化 呢?
是的。
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;
答
好吧我明白了:
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;
答
,你必须建立由专人该结构,然后使指针指向了这一点。
要么
static struct PipeShm myPipe ={};
static struct PipeShm *pmyPipe = &myPipe;
或
static struct PipeShm *myPipe = malloc();
myPipe->field = value;
您需要分配内存的指针,以便你可以做任何有意义的事情吧。指针本身只是指向一个随机地址。您需要确保指针指向的地址足够大以容纳结构内容。 – 2012-07-29 14:19:43
我不明白...为什么你需要一个*指针*? – 2012-07-29 14:21:17
查看问题[here](http://stackoverflow.com/questions/2177391/allocating-memory-for-a-structure-in-c)为了声明一个指针,你需要分配内存,所以你的基本要求相同事情。 – rudolph9 2012-07-29 14:23:15