2011-09-27 102 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);