2011-09-27 99 views
1

我想在函數參數中傳遞結構作爲指針。這裏是我的代碼傳遞結構作爲指針

#include <stdio.h> 
#include <stdbool.h> 
#include <string.h> 

typedef struct { 
    int yearOfManufacture; 
    char model[50]; 
    bool gasoline; 
} Car; 


void PrintCarDetails(Car details); 

int main (int argc, const char * argv[]) 
{   
    Car ford; 
    ford.yearOfManufacture = 1997; 
    ford.gasoline = true; 
    strcpy(ford.model, "Focus"); 

    PrintCarDetails(&ford); 

    return 0; 
} 

void PrintCarDetails(Car *details) 
{ 
    printf("Car model %s", details->model); 
} 

我得到一個錯誤「路過的汽車不兼容型轎車的參數我錯過了什麼

+1

提示:函數定義也可用作原型,只要您在使用它之前對其進行了定義。所以,如果你在文件底部寫入'main',你可以省略原型。 *有些人不喜歡底部的「main」;有些人不喜歡它的頂部;大聲笑* – pmg

+0

@pmg我會爭辯說,沒有必要寫更多的原型而不是絕對必要的(我的意思是說,現在常用的語言有多少是他們需要的)的實際好處應該勝過任何美學偏好的排序的功能。幹,所有這一切。 –

回答

6

向前聲明應該是:?

void PrintCarDetails(Car * details); 
3
 
void PrintCarDetails(Car *details); 

*
是缺少正向聲明

+0

謝謝!愚蠢的錯誤:) – jingo

3

函數定義與函數不同 宣言。在聲明中聲明Car結構應該用作參數,但是在定義中需要指向Car結構的指針。

3

您可能錯過了PrintCarDetails函數的聲明。 應該是:

void PrintCarDetails(Car *details); 

工作here

0

,這只是一個小錯誤,你的函數定義和聲明不匹配:

  • 線12:void PrintCarDetails(Car details);
  • 26行: void PrintCarDetails(Car *details);

只是修復了第12行:void PrintCarDetails(Car *details);