我可以帮您翻译。这段文字的意思是:如何使用指定初始化的结构体指针?例如,我知道如何使用点运算符和指定初始化来初始化结构体,像这样:
person per = { .x = 10,.y = 10 };
但如果我想用结构体指针来实现呢?
我尝试了这个方法,但没有成功:
pper = (pperson*){10,5};
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;
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
};