如何将结构传递给函数

时间:2017-10-09 15:36:35

标签: c function struct parameter-passing

有人能告诉我解释,如何将struct传递给函数?我试图将我的排序放入一个函数中,并将我的结构传递给它

typedef struct
{
    int weight;
    int price;
    Color color;
    Equip equip;
}Cars;

Cars automobil[5]; 

sort_cars(&automobil[NUMBER_OF_CARS]);

void sort_cars(struct Cars*automobil[NUMBER_OF_CARS]){
    int i,j;
    CarsmobilOne={};
    for(j=0; j<NUMBER_OF_CARS-1; j++)
    {
        for (i=0; i<NUMBER_OF_CARS-1; i++){
            if (automobil[i]->weight < automobil[i+1]->weight)
            {
                continue;

            }else{
                mobilOne = automobil[i];
                automobil[i] = automobil[i+1];
                automobil[i+1] = mobilOne;
            }
        }
    }

我从类型'struct Cars *'|中分配类型'Cars'时出现此错误“不兼容的类型”我试图像人们在互联网上那样传递结构

2 个答案:

答案 0 :(得分:3)

  

我试图像人们在互联网上那样传递结构

不,你没有。您试图发明一种用于传递数组的新语法,但不幸的是,它是数组以C语言传递的方式。

在C语言中,当数组作为参数传递给函数时,数组会衰减为指针,因此人们通常会将实际长度与数组一起传递。

所以你应该使用:

void sort_cars(Cars*automobil, int number_of_cars){
    int i,j;
    Cars mobilOne={};
    for(j=0; j<number_of_cars-1; j++)
    {
        for (i=0; i<number_of_cars-1; i++){
            if (automobil[i]->weight < automobil[i+1]->weight)
            {
                continue;

            }else{
                mobilOne = automobil[i];
                automobil[i] = automobil[i+1];
                automobil[i+1] = mobilOne;
            }
        }
    }
}

并称之为:

sort_cars(automobil, 5);

答案 1 :(得分:2)

int x = rand();
int p = std::find(v.begin(), v.end(), x); 

记住K&amp; R的许多明智的说法之一:&#34;当一个数组名称传递给一个函数时,传递的是数组开头的位置&#34;。

在sortThem()&#34; autom&#34;是一个变量,其值是automobil [0]的地址。

约翰