将结构传递给函数

时间:2011-02-07 11:25:24

标签: c structure

什么时候这样做我得到

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 个答案:

答案 0 :(得分:2)

告诉你要做什么很棘手,但就编译错误而言,你写的是:

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

我认为你的意思是写这个:

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

答案 1 :(得分:1)

keys是一个结构,但是display需要一个指向结构的指针(为此目的你写了*)。使用display(&keys)会将指针传递给结构。

传递指针而不是结构的要点是C参数是通过值传递的,它涉及一个副本。如果你通过了这个结构,那么就会制作一个副本,考虑到结构通常非常大,这是一个不必要的处理时间浪费。传递指针只涉及该指针的副本,这更快。

答案 2 :(得分:0)

你在原型的末尾错过了一个分号,用于显示()。

您还需要从main指出返回类型,例如void main()。

答案 3 :(得分:0)

我认为你的意思是:

#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);
}

答案 4 :(得分:0)

您必须创建struct node类型的变量并传递其keys地址。

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

无论如何,使用给定的代码,您只会打印keys集合的第一个元素,因此您需要更新display()函数(即:您必须传入元素的数量) keys数组)。