2012-12-15 48 views
-1
#include<stdio.h> 

typedef struct node 
{ 
    int val; 
    struct node *link; 
}hop; 

main() 
{ 
    int c; 
    hop *m,*t; 
    m=(hop *)malloc(sizeof (hop)); 
    m->val=10; 
    t=change_val(m); 
    printf("%d",t->val); 
} 

hop *change_val(node* m) 
{ 
    m->val=20; 
    return m; 
} 

但我在函數和賦值中出錯。我試圖在米前改變標誌。我也嘗試過使用雙指針。幫我。如何在C中返回指針?

+1

你什麼錯誤? – StoryTeller

+0

將'main()'改爲'int main(void)'。爲struct標記和typedef使用一致的名稱; 'node'和'hop'之間沒有明顯的關係,儘管它們指的是完全相同的東西。考慮完全刪除typedef,並將該類型稱爲「struct node」。您的malloc調用可以變得更簡單和更強大,以適應未來的代碼更改:'m = malloc(sizeof * m);'。如果你叫'malloc',你需要'#include '。你的編譯器*應該*已經警告過你;調整警告級別直到它發生。 –

+0

並且不要忘記初始化結構的'link'成員。如果你的代碼編譯了,它必須由類似於C++編譯器的編譯器編譯(除了那些需要在使用之前聲明的所有函數),因爲'hop * change_val(node * m)'不應該編譯在C語言中,因爲類型'node'永遠不會被聲明(但是C++編譯器會在'struct node'聲明之後識別'node')。 –

回答

3

你需要使用它之前聲明你的函數:

hop *change_val(hop* m); 

int main() 
{ 
..... 

,與你的名字你的結構一致,不投的malloc返回,提供返回類型爲mainfree的動態分配的內存。

0

錯誤的原因是您在函數定義中有node的錯誤類型。

要麼使用:

hop *change_val(struct node* m) 
{ 
... 
} 

OR

hop *change_val(hop* m) 
{ 
... 
} 
+0

下面是修復後的演示:http://ideone.com/BnL1d5 –