【问题标题】:Passing an array of Struct to a sorting function in C将结构数组传递给C中的排序函数
【发布时间】:2020-10-24 15:21:55
【问题描述】:

我正在尝试将struct 的数组传递给与它一起工作并修改其内容的函数。我已经阅读了很多文章,但仍然找不到我需要的内容。

我需要将这个struct 的数组传递给一个函数并使用这个数组的值,并且修改需要是全局 修改。

在这里,我实际上是在对这个结构区域的值进行排序;该程序给了我这个警告并崩溃:

警告:从不兼容的指针传递 'insersort' 的参数 1 类型 [-Wincompatible-pointer-types]|

struct rectangle{
    char name[MAXC];
    float x;
    float y;
    float area;
    float perimeter;
};

void insersort(struct rectangle *rect[],int k)
{
    int i,j;
    float x;
    for(i=1;i<k;i++)
    {
        x=rect[i]->area;
        j=i-1;
        while(j>=0 && x<rect[j]->area)
        {
            rect[j+1]->area=rect[j]->area;
            j--;
        }
        rect[j]->area=x;
    }
    return;
}
..... 

我这样调用函数:

struct rectangle rect[MAX];
insersort(rect,k); 

【问题讨论】:

  • 间接太多。将第一个函数参数定义为struct rectangle rect[]struct rectangle *rect,但不能同时定义两者。你的 struct rectangle *rect[] 是一个指针数组。
  • ^^^^^ 例如在insersort中,参数应为struct rectangle rect[],所有rect[n]-&gt;应更改为rect[n].

标签: arrays c struct


【解决方案1】:

你写的

void insersort(struct rectangle *rect[],int k)

insertof 的主体写得好像你的意思

void insersort(struct rectangle (*rect)[],int k)

即指向rect的指针数组

但你可能打算把它写成

void insersort(struct rectangle rect[],int k)

不要在insertof 中使用-&gt;

【讨论】:

  • 如何在函数内部使用例如 rect[i].area,我的意思是我需要使用指针,因为结构是通过引用传递的,如果我将结构作为 void insersort 传递(struct rectangle rect[],int k) 是通过引用传递的吗?由于函数的参数中没有指定“*”,所以该函数不是在处理它的副本吗?尝试了对程序的许多修改,但没有一个起作用。谢谢。
  • @Big-D:因为数组总是通过引用传递的。
  • 谢谢,现在它可以工作了,我确定必须在函数中使用'->'来处理数组结构,但我错了。
猜你喜欢
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
  • 1970-01-01
相关资源
最近更新 更多