2014-11-06 97 views
0

我讀了一本書上的數據結構C.這兩種函數聲明有什麼區別?

我看到像這樣的演習代號,

這是結構的聲明。

typedef struct node 
{ 
    int data; 
    struct node *next; 
}node; 

函數聲明,這將頭樹..

node * create (int n); // please explain this 

創建是一個功能

但是,我們可以這樣寫?

int create (int n); 

使用哪一個和前面的函數聲明的優點是什麼?

+1

'int create(int n);'不與結構有任何連接並返回'int',而'node * create(int n);'返回一個指向結構的指針並與結構有一定的連接。由於兩者不同,您可以使用的取決於您的需求。 – 2014-11-06 11:56:52

回答

0
  • C允許從函數返回一個指針!

要做到這一點,您可以聲明像這樣..

int * myFunction(int N) 
{. . .} 

意味着它將採取整數N作爲參數並返回int類型的指針。

注:

一點要記住的是,這不是好主意,一個局部變量的返回地址 的功能之外,所以你必須 定義本地變量靜態變量。

一樣,

int * myFunction(int N) { 
static int M[10] 
.... 
return M; 
} 

來到你的問題......

node * create (int n); 

說明功能創建將整型參數n,它會返回一個指向node

因此,使用,

  • node * create (int n);返回一個指針 而
  • int create (int n);返回一個整數!

希望它有幫助!

+0

很好解釋!謝謝! – 2014-11-06 12:24:41

2

node * create (int n);

功能是create將接受一個int參數[n],並且將指針返回到node

int create (int n);

功能是create將接受一個int參數[n]和將返回int

在你的情況下,node是一個結構類型定義,顯然不是int。所以,你不能用代替第一個函數原型與後面的那個。他們都有不同的回報類型。所以,advantage的比較是毫無意義的。

Which one to use - 取決於您的需要。

  1. 如果你希望你的函數返回一個指針[可能(在故障情況下成功的情況下,或NULL)的指針新分配的節點,],你需要使用node * create (int n);您可以在以後使用指向呼叫者函數中新分配的節點的指針。
  2. 如果你希望你的函數返回成功或失敗的指示[也許1和0],那麼你可以使用int create (int n);
+0

我會添加,當返回一個指針時,使用「NULL」作爲失敗值可以涵蓋兩種用例。 – Antonio 2014-11-06 12:09:57

+0

@Antonio謝謝。更新答案以添加您的視圖。 – 2014-11-06 12:11:20

0
node * create (int n); 

這個函數n作爲參數,並返回一個指針鍵入node *。這裏node是一個如上定義的結構,這個函數返回一個指向這個結構的指針。
您不應該使用int作爲此函數的返回類型,因爲它返回的是指針而不是值。

+0

感謝您的回答,因爲我沒有15個聲望,所以不能upvote謝謝你! – 2014-11-06 12:01:41