2015-10-20 142 views
0

我在C以下结构:如何初始化指针指向的结构体的成员?

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

我:

Person *person; 

person->age = 21; 

这将导致分段错误,我曾尝试谷歌搜索,但我发现的资源没有该结构被声明为一个指针。我需要将这个结构声明为一个指针,以便它可以传递到另一个函数中。我将如何正确访问这个结构的成员? (我也需要这样做char)。

+1

您需要先为结构分配空间。使用'malloc()' – Haris

回答

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. 
+0

谢谢你这个例子! – Steven

+0

当然,很高兴我能帮上忙。一旦你看到所有的东西放在一起,它开始有意义。 –

0

你必须为你的结构实例分配内存为:

Person *person = malloc(sizeof(Person)); 

否则你也可以声明为

Person person; 

,并分配值,

person.age = 21; 
1

您需要为某处的结构分配内存。如果你有一个像void func (Person* p);的功能,那么你传递结构,以这样的:

Person person; 
func(&person); 

或等价的:

Person person; 
Person* ptr = &person; 
func(ptr); 
0

在主做:

Person *person=malloc (1 * sizeof (Person)); 
person->age = 21; 

你需要分配在你的物体的记忆中真实的地方。然后,你可以处理它

0

如果你想使用这个指针,你需要首先分配内存malloc。像这样:

Person *person = malloc(sizeof(Person)); 

但在你的代码,你也可以不用指针,通过正常申报的人,像这样的:

Person pers; 
pers.age = 21; 
Person* pointer = &pers;