Присвоение значений ключу в указателе на запись в C - PullRequest
5 голосов
/ 29 марта 2012

Извините, если название немного сбивает с толку.Я создаю такую ​​структуру, как:

struct record
{
    int value;
    int key;
};

Затем с помощью typedef вызываю указатель на запись "Item", например так:

typedef struct record* Item;

По сути, яследуя указаниям Роберта Седжвика (третье издание) на стр. 290, как это было сделано в разделе «Алгоритмы на Си» на случай, если у кого-нибудь появится эта книга.затем присвоить это ключу.Вот что у меня есть, и ошибки, которые я получаю:

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-> Key, и я немного растерялся :) Спасибо!

Если кому-то нужна какая-то другаячасть кода, которую я не счел нужной, я опубликую, как только увижу запрос.

Редакция: я переместил свою функцию setKey выше standInput, поэтому ошибка компиляции исчезла.Хотя я получаю ошибку сегмента, поэтому я все еще неправильно ее назначаю:)

Ответы [ 3 ]

3 голосов
/ 29 марта 2012

setKey принимает указатель на Item.A[i] не указатель на Item, а фактический Item объект.

Чтобы передать его в качестве указателя, выполните одно из следующих действий:

setKey(A + i, x);

или

setKey(&A[i], x);

3 голосов
/ 29 марта 2012

Вам нужно передать адрес элемента массива:

setKey(&A[i], x);

Тип A[i] равен Item, а не Item *, как метод setKey ожидает

Редактировать Как указывает Вайзард, Item уже является указателем на структуру, поэтому вы должны изменить свою подпись на setKey, чтобы она взяла Item, а не Item *, и назвать ее как setKey(A[i], x).

1 голос
/ 29 марта 2012

Тип первого аргумента setKey должен быть Item, а не Item *, поскольку тип Item уже является указателем.Вы хотите передать указатель на запись, а не указатель на указатель на запись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...