我在C中有以下结构:
typedef struct
{
int age;
char name[20];
} Person;
在main()
我有:
Person *person;
person->age = 21;
这会导致分段错误,我尝试过谷歌搜索,但我找到的资源没有将结构声明为指针。我需要将此结构声明为指针,以便将其传递给另一个函数。我如何正确访问此结构的成员? (我还需要为char
)执行此操作。
答案 0 :(得分:1)
您需要在某处为结构分配内存。如果你有一个像void func (Person* p);
这样的函数,那么你就像这样传递一个结构:
Person person;
func(&person);
或同等的:
Person person;
Person* ptr = &person;
func(ptr);
答案 1 :(得分:1)
这是相当直接的,声明一个指向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.
答案 2 :(得分:0)
您必须为结构实例化分配内存:
Person *person = malloc(sizeof(Person));
否则你也可以声明为
Person person;
并将值指定为,
person.age = 21;
答案 3 :(得分:0)
主要做:
Person *person=malloc (1 * sizeof (Person ));
person->age = 21;
您需要在内存中为对象分配一个真实位置。然后,你可以处理它
答案 4 :(得分:0)
如果要使用此指针,则需要先使用malloc
分配内存。像这样:
Person *person = malloc(sizeof(Person));
但是在你的代码中,你也可以不用指针,通过正常声明人,如:
Person pers;
pers.age = 21;
Person* pointer = &pers;