2015-10-20 192 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;