如何初始化指针指向的结构体的成员?
我在C以下结构:如何初始化指针指向的结构体的成员?
typedef struct
{
int age;
char name[20];
} Person;
在
main()
我:
Person *person;
person->age = 21;
这将导致分段错误,我曾尝试谷歌搜索,但我发现的资源没有该结构被声明为一个指针。我需要将这个结构声明为一个指针,以便它可以传递到另一个函数中。我将如何正确访问这个结构的成员? (我也需要这样做char
)。
这是相当简单的,声明一个指向struct,然后与malloc
分配和指定/复制值:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int age;
char name[20];
} Person;
void agingfunction (Person **p)
{
(*p)->age = 25;
}
int main (void) {
Person *p = malloc (sizeof *p);
if (!p) return 1;
p->age = 5;
strncpy (p->name, "Charles Darwin", 20);
printf ("\n %s is %d years old.\n", p->name, p->age);
agingfunction (&p);
printf ("\n %s is now %d years old.\n", p->name, p->age);
free (p);
return 0;
}
输出
$ ./bin/structinit
Charles Darwin is 5 years old.
Charles Darwin is now 25 years old.
谢谢你这个例子! – Steven
当然,很高兴我能帮上忙。一旦你看到所有的东西放在一起,它开始有意义。 –
你必须为你的结构实例分配内存为:
Person *person = malloc(sizeof(Person));
否则你也可以声明为
Person person;
,并分配值,
person.age = 21;
您需要为某处的结构分配内存。如果你有一个像void func (Person* p);
的功能,那么你传递结构,以这样的:
Person person;
func(&person);
或等价的:
Person person;
Person* ptr = &person;
func(ptr);
在主做:
Person *person=malloc (1 * sizeof (Person));
person->age = 21;
你需要分配在你的物体的记忆中真实的地方。然后,你可以处理它
如果你想使用这个指针,你需要首先分配内存malloc
。像这样:
Person *person = malloc(sizeof(Person));
但在你的代码,你也可以不用指针,通过正常申报的人,像这样的:
Person pers;
pers.age = 21;
Person* pointer = &pers;
您需要先为结构分配空间。使用'malloc()' – Haris