将值分配给指向C中记录的指针中的键

时间:2012-03-29 02:49:59

标签: c pointers struct

很抱歉,如果标题有点令人困惑。我正在做的是创建一个结构,如:

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之上,因此编译错误消失了。我得到的是段故障,所以我仍然指错了:)

3 个答案:

答案 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类型是指针。您希望将指针传递给记录,而不是指向记录指针的指针。