2011-02-07 115 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陣列)。