在C中访问本地定义的结构

时间:2013-11-19 02:27:44

标签: c arrays sorting pointers struct

我已经定义了一个名为item的本地结构。我试图根据其中一个元素“uprice”对项目进行排序。当我尝试在排序中命中后切换两个项目中的元素时,我得到一个奇怪的错误,说我的数组a []结构项指针实际上不包含结构项。以下是我对代码及其后面的错误的看法:

这是我定义bsort函数和结构的代码的第一部分:

void bsort(struct item* a[], int n);

struct item{
        int bcode;
        int pcode;
        float length;
        float width;
        int sheets;
        int scode;
        float price;
        float uprice;
};

struct item* list;

这是我实现我的bsort函数的代码的第二部分:

void bsort(struct item* a[], int n)
{
  int i, j, temp;

  for (i = 0 ; i < n-1; i++)
  {
    for (j = 0 ; j < n-i-1; j++)
    {
      if (a[j].uprice > a[j+1].uprice)
      {
        temp = a[j].bcode;
        a[j] = a[j+1].bcode;
        a[j+1].bcode = temp;

        //Switch each property of the array individually
      }


    }
  }
}

引用bsort中的代码的错误消息:

price2.c: In function ‘bsort’:
price2.c:54: error: request for member ‘bcode’ in something not a structure or union
price2.c:55: error: request for member ‘bcode’ in something not a structure or union
price2.c:56: error: request for member ‘bcode’ in something not a structure or union

等...

2 个答案:

答案 0 :(得分:1)

a[j].uprice

它仍然是指针。

答案 1 :(得分:1)

声明它的方式,a是一个指向item的指针数组。在这种情况下,您需要正确取消引用每个a[i]

      if (a[j]->uprice > a[j+1]->uprice)
      {
        temp = a[j]->bcode;
        a[j] = a[j+1]->bcode;
        a[j+1]->bcode = temp;

        //Switch each property of the array individually
      }