很抱歉,如果标题有点令人困惑。我正在做的是创建一个结构,如:
struct record
{
int value;
int key;
};
然后使用typedef调用指向记录“Item”的指针,如下所示:
typedef struct record* Item;
基本上我正在跟踪Robert Sedgewick(第三版)在第26页的C语言中的完成情况,以防万一有人碰巧有这本书。
我遇到的问题是从控制台读取值,然后将其分配给键。这就是我所拥有的,以及我得到的错误:
void setKey(Item *element, int x)
{
element->key = x;
}
void standInput(Item A[], int length)
{
int i;
int x;
for(i = 0; i < length; i++)
{
printf("Enter a value for spot %i: ", i+1);
scanf("%d", &x);
setKey(A[i], x);
}
}
gcc Item.h
Item.h:33:6: warning: conflicting types for ‘setKey’
Item.h:23:3: note: previous implicit declaration of ‘setKey’ was here
如果我能在正确的方向上轻推,我真的很感激。当Item只是简单的整数时,我得到了这个任务的程序,但现在我正在尝试使用Item-&gt; Key,我有点迷失:)谢谢!
如果有人需要我认为不必要的代码的任何其他部分,我会在看到请求后立即发布。
修订版:我将setKey函数移到了standInput之上,因此编译错误消失了。我得到的是段故障,所以我仍然指错了:)
答案 0 :(得分:3)
您需要传递数组元素的地址:
setKey(&A[i], x);
A[i]
的类型为Item
而不是Item *
,因为setKey
方法需要
修改正如Wyzard所指出的Item
已经是指向结构的指针,因此您应该更改setKey
的签名以取Item
而不是Item *
并将其称为setKey(A[i], x)
。
答案 1 :(得分:3)
setKey
获取指向Item
的指针。 A[i]
不是指向Item
的指针,而是实际的Item
对象。
将它作为指针传递:
setKey(A + i, x);
或
setKey(&A[i], x);
答案 2 :(得分:1)
setKey
的第一个参数的类型应该是Item
,而不是Item *
,因为已经的Item
类型是指针。您希望将指针传递给记录,而不是指向记录指针的指针。