问题描述
如何使用具有指定初始化的结构指针?例如,我知道如何使用点运算符和指定的初始化来初始化结构,如:
person per = { .x = 10,.y = 10 };
但是如果我想用结构指针来做呢?
我做了这个,但没有用:
pper = (pperson*){10,5};
解决方法
如果 pper
是指向已分配内存的 person *
,您可以使用复合文字为 *pper
赋值,例如:
*pper = (person) { 10,5 };
*pper = (person) { .x = 10,.y = 5 };
如果它还没有指向分配的内存,你必须为它分配内存,之后你可以赋值:
pper = malloc(sizeof *pper);
if (!pper)
{
fputs("Error,unable to allocate memory.\n",stderr);
exit(EXIT_FAILURE);
}
*pper = (person) { 10,5 };
或者您可以将其设置为指向现有对象:
pper = &SomeExistingPerson;
,
复合字面量看起来像花括号括起来的初始化列表的转换。它的值是一个类型转换中指定的对象,包含初始化器中指定的元素。这是一个 reference。
例如,对于 struct pperson
,它看起来像这样:
#include <stdio.h>
#include <malloc.h>
struct pperson
{
int x,y;
};
int main()
{
// p2 is a pointer to structure pperson.
// you need to allocate it in order to initialize it
struct pperson *p2;
p2 = (struct pperson*) malloc( sizeof(struct pperson));
*p2 = (struct pperson) { 1,2 };
printf("%d %d\n",p2->x,p2->y);
// you may as well intiialize it from a struct which is not a pointer
struct pperson p3 = {5,6} ;
struct pperson *p4 = &p3;
printf("%d %d\n",p4->x,p4->y);
free(p2);
return 0;
}
,
您可以使用指向复合文字的指针:
struct NODE{
int x;
int y;
}
struct NODE *nodePtr = &(struct NODE) {
.x = 20,.y = 10
};
- 请注意,C99 中引入了复合字面量。