2015-04-04 111 views
0

讓我們說我們有那些2結構:C結構成員的功能

struct date 
{ 
    int date; 
    int month; 
    int year; 
}; 

struct Employee 
    { 
    char ename[20]; 
    int ssn; 
    float salary; 
    struct date dateOfBirth; 
}; 

如果我想用一個結構的成員將其發送到一個功能,讓我們說我們有這個功能:

void printBirth(date d){ 
    printf("Born in %d - %d - %d ", d->date, d->month, d->year); 
} 

我的理解是,如果IM定義一個員工,我想打印他的出生日期,我會做:

Employee emp; 
emp = (Employee)(malloc(sizeof(Employee)); 

emp->dateOfBirth->date = 2; // Normally, im asking the user the value 
emp->dateOfBirth->month = 2; // Normally, im asking the user the value 
emp->dateOfBirth->year = 1948; // Normally, im asking the user the value 


//call to my function : 
printBirth(emp->dateOfBirth); 

但當我這樣做,我得到一個錯誤: 警告:從不兼容的指針類型傳遞'functionName'的參數1(在我們的例子中它將printBirth)。

我知道,如果該函數可以與結構日期的指針一起工作,但我沒有這個選項會更容易。該函數必須接收結構日期作爲參數。

所以我想知道我是如何將結構中定義的結構傳遞給函數的。

非常感謝。

+3

'Employee * emp; emp =(Employee *)(malloc(sizeof(Employee)); emp-> dateOfBirth.date = 2;'... – BLUEPIXY 2015-04-04 21:38:21

+0

根據編譯器的不同, struct Employee'或使用類型定義,如'typedef struct {...} Employee'。 – holgac 2015-04-04 21:38:48

+0

或'Employee emp = {「」,0,0.0f,{2,2,1948}};'''printBirth(emp。 ' – BLUEPIXY 2015-04-04 21:41:21

回答

0

試試這個代碼

#include <stdio.h> 

typedef struct 
{ 
    int date; 
    int month; 
    int year; 
} date; 

typedef struct 
{ 
    char ename[20]; 
    int ssn; 
    float salary; 
    date dateOfBirth; 
} Employee; 

void printBirth(date *d){ 
    printf("Born in %d - %d - %d \n", d->date, d->month, d->year); 
} 

int main() 
{ 
    Employee emp; 

    emp.dateOfBirth.date = 2; 
    emp.dateOfBirth.month = 2; 
    emp.dateOfBirth.year = 1948; 

    printBirth(&emp.dateOfBirth); 
} 

我想建議,使用typedef當youre使用結構。如果您使用的是typedef您不再需要通過使用typedef代碼來編寫struct更清潔,因爲它提供了更多的抽象化代碼