2011-02-07 73 views
0

什么时候这样做我得到将结构传递给功能

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

我觉得你的意思是:

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

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

传递一个指针而不是一个结构的意义在于C参数是按值传递的,这涉及到一个副本。如果你通过了这个结构,那么就会有一个副本,由于结构通常很大,所以对处理时间是不必要的浪费。传递指针只涉及该指针的一个副本,速度更快。

0

您在display()的原型末尾丢失了一个分号。

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

+0

例如'int main()' – Muggen

+0

啊,是的,我的错误。您必须始终返回一个值;这只是可以消失的参数。 – 2011-02-07 16:24:10

2

是相当棘手的告诉你想要做什么,而是尽可能编译错误去,在那里你写了这个:

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

我想你的意思写这篇文章:

​​
0

你必须创建struct node类型的变量,并通过其keys地址。

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

反正给定的代码,你将只打印keys集合的第一个元素,所以你需要更新display()功能(即:你会在元素的数传中keys阵列)。