【问题标题】:Binary search for specific value in array of structs在结构数组中对特定值进行二进制搜索
【发布时间】:2011-06-04 09:05:16
【问题描述】:

我编写了这个函数,它使用二进制搜索在结构数组中查找特定值。为什么不编译?

我收到此错误:

prog.c:224: error: subscripted value is neither array nor pointer
prog.c:226: error: subscripted value is neither array nor pointer

这是函数:

int FieldSearch(Field *pArr, int size, int val)
{
    int low=0,high=size-1, middle;
    while (low <= high)
    {
        middle = (low + high)/2;
        if (val == pArr->Id[middle])
            return middle;
        else if (val < pArr->Id[middle])
            high = middle -1;
        else
            low = middle +1;
    }
    return NOT_FOUND;
}

这是字段结构:

typedef struct field
{
        char Id;
        Coordinates location;
        int area;
        int price;
} Field;

也许原型错了……

【问题讨论】:

  • id 是整数,我的意思是 %d,是的,这是 c...

标签: struct binary-search


【解决方案1】:

你的问题是这样的说法:

pArr->Id[middle]

看起来,但我没有足够的信息,您的成员 ID 不是指针或数组,而仅仅是一个变量。因此,您无法使用operator[] 访问它。你应该向我们展示这个Field 对象的样子。

我猜你应该这样做

(pArr + middle)-&gt;Id 所以这将访问您传递给函数的 Field 数组的元素。然后你必须传入一个实际的Field 结构数组,才能让它工作。

【讨论】:

  • 这是字段结构: typedef struct field { char Id;坐标位置;整数区域;国际价格; } 字段;
  • Id 不是数组,正如我所说,你不能用operator[] 访问它
【解决方案2】:

如果要搜索“数组”pArr,则需要将括号直接放在标识符后面。这应该有效:

pArr[middle].Id

【讨论】:

  • 好吧,这似乎可行..我想问题是我没有把括号放在正确的地方..这是修复线 if (val == pArr[middle].Id)返回中间; else if (val
猜你喜欢
  • 1970-01-01
  • 2023-03-17
  • 2019-11-19
  • 2022-01-22
  • 2013-09-29
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多