передавая структуру функционировать - PullRequest
0 голосов
/ 07 февраля 2011

когда это сделать, я получаю

error: incompatible type for argument 1 of ‘display’ 

    #define M 4
    struct show
    {
     int value;
    };

    struct node
    {
     struct show keys[M-1];
    };

    void display(struct show *ptr)

    main()
    {
                struct show key;
                printf("Enter value:\n ");
                scanf("%d",&keys.value);
                display(keys);

    }

    void display(struct show *ptr)
    {

     printf("%d", ptr->value);

    }

, но когда я даю дисплей (& ключ), ошибки не будет, но когда я передаю ключи в качестве параметра для отображения, это похоже на передачу адреса структурысам, почему я должен давать & ключи?

Ответы [ 5 ]

2 голосов
/ 07 февраля 2011

Сложно сказать, что вы пытаетесь сделать, но что касается ошибок компиляции, где вы написали это:

scanf("%d",&keys.value);
display(keys);

Я думаю, что вы хотите написать это:

scanf("%d",&key.value);
display(&key);
1 голос
/ 07 февраля 2011

keys - это структура, но display ожидает указатель на структуру (для этой цели вы написали *). Использование display(&keys) вместо этого передает указатель на структуру.

Смысл передачи указателя вместо структуры состоит в том, что аргументы C передаются по значению, которое включает в себя копию. Если вы передадите структуру, то будет сделана копия, которая, учитывая, что структура обычно довольно большая, является ненужной тратой времени на обработку. Передача указателя включает только копию этого указателя, что быстрее.

0 голосов
/ 07 февраля 2011

Я думаю, вы имели в виду это:

#include <stdio.h>

#define M 4
struct show
{
    int value;
};

struct node
{
    struct show keys[M-1];
};

void display(struct show *ptr);

main()
{
    int i;
    struct node node_instance;
    for (i = 0; i < M-1; i++) {
        printf("Enter value #%d:\n ", i);
        scanf("%d",&node_instance.keys[i].value);
        display(&node_instance.keys);
    }

}

void display(struct show *ptr)
{
    printf("%d\n", ptr->value);
}
0 голосов
/ 07 февраля 2011

Вы должны создать переменную типа struct node и передать ее keys адрес.

main()
{
    struct node theNode;
    // populate theNode's keys elements
    display(theNode.keys);
}

В любом случае, с данным кодом вы напечатаете только первый элемент коллекции keys,поэтому вам нужно обновить функцию display() (то есть: вам нужно будет указать количество элементов в массиве keys).

0 голосов
/ 07 февраля 2011

Вам не хватает точки с запятой в конце прототипа для display ().

Также вам необходимо указать тип возврата из main, например, void main ().

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