什么时候这样做我得到
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);
}
但是当我给显示(&键)时不会出现任何错误,但是当我将键作为参数传递给显示时就像传递结构本身的地址一样,我为什么要给&键?
答案 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
数组)。