2014-09-11 91 views
-2

我有這些結構定義:C程序調用指針的指針

typedef struct { 
    char *first_name; 
    char *last_name; 
    char SSN[9]; 
    float gpa; 
    struct student *next; 
} student; 

typedef struct { 
    student *head; 
    student *current; 
    student *tail; 
} students; 

在我的主要功能,我想在同學結構添加學生。然後,打電話給首席學生的名字。我怎麼做?

void add(students *list, student *a) { 
    if(list->head) { 
     a->next = NULL; 
     list->head = &a; 
     list->current = list->head; 
     list->tail = NULL; 
    } else { 
     printf("Will implement"); 
    } 
} 

int main() 
{ 
    students grade1; 

    student a; 
    a.first_name = &"Misc"; 
    a.last_name = &"Help"; 

    add(&grade1, &a); 

    printf("%s %s", a.first_name, a.last_name); 
    printf("%s", grade1.head->first_name); 
} 

printf(「%s」,grade1.head-> first_name);

似乎沒有工作。有什麼建議麼?

感謝

+2

'似乎沒有工作。'什麼不工作?你想要什麼?這段代碼是否編譯?具體關於你的問題。 – 2014-09-11 04:20:48

+1

你是不是收到關於'list-> head =&a;'上的不正確類型的警告?如果新學生被列入名單的頭部,你是否需要將一些東西放在列表的舊頭上,以免失去它? – Barmar 2014-09-11 04:29:05

+0

我想要grade1.head-> first_name返回雜項 – Raza 2014-09-11 04:36:50

回答

0

首先你必須初始化對象grade1的所有數據成員。例如

students grade1 = { 0 }; 

其次代替

student a; 
a.first_name = &"Misc"; 
a.last_name = &"Help"; 

應該至少像

student *a = malloc(sizeof(student)); 
a->first_name = "Misc"; 
a->last_name = "Help"; 
a->next = NULL; 

功能add可能看起來像

void add(students *list, student *a) 
{ 
    if (list->tail == NULL) 
    { 
     list->head = list->tail = a; 
    } 
    else 
    { 
     list->tail->next = a; 
    } 
} 

而且它可以被稱爲as

add(&grade1, a);