如何初始化指针指向的结构的成员?

时间:2015-10-20 06:32:59

标签: c pointers struct

我在C中有以下结构:

typedef struct
{
    int age;
    char name[20];  
} Person;

main()我有:

Person *person;

person->age = 21;

这会导致分段错误,我尝试过谷歌搜索,但我找到的资源没有将结构声明为指针。我需要将此结构声明为指针,以便将其传递给另一个函数。我如何正确访问此结构的成员? (我还需要为char)执行此操作。

5 个答案:

答案 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;