如何使用结构指针和指定初始化来初始化 C 结构
How To Initialize a C Struct using a Struct Pointer and Designated Initialization
如何使用指定初始化的结构指针?例如,我知道如何使用点运算符和指定的初始化来初始化结构,例如:
person per = { .x = 10,.y = 10 };
但是如果我想用结构指针来做呢?
我做了这个但是没用:
pper = (pperson*){10,5};
您可以使用指向复合文字的指针:
struct NODE{
int x;
int y;
}
struct NODE *nodePtr = &(struct NODE) {
.x = 20,
.y = 10
};
- 请注意,复合字面量是在 C99 中引入的。
如果 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;
}
如何使用指定初始化的结构指针?例如,我知道如何使用点运算符和指定的初始化来初始化结构,例如:
person per = { .x = 10,.y = 10 };
但是如果我想用结构指针来做呢?
我做了这个但是没用:
pper = (pperson*){10,5};
您可以使用指向复合文字的指针:
struct NODE{
int x;
int y;
}
struct NODE *nodePtr = &(struct NODE) {
.x = 20,
.y = 10
};
- 请注意,复合字面量是在 C99 中引入的。
如果 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;
}