2016-07-25 127 views
-5

鑑於此代碼之間的差異:是什麼下列代碼

#include <iostream> 
using namespace std; 
int main() 
{ 
    typedef struct node 
    { 
    int data; 
    node* left; 
    node* right; 
    } *nodeptr; 

    nodeptr root, curr, temp; 

} 

而這第二個代碼:

#include <iostream> 
using namespace std; 
int main() 
{ 
    struct node 
    { 
    int data; 
    node *left; 
    node *right; 
    } 

    node *root, *curr, *temp; 

} 

我有幾個問題:

  1. 做兩個代碼代表一樣的東西?
  2. int* aint *a代表了同樣的事情嗎?
  3. 在我聲明的第一個代碼中:queue <nodeptr>q它可以工作,但在第二個代碼中,當我聲明queue <node>q時它沒有工作。爲什麼?
+0

請問每個問題一個問題。否則,未來的研究是沒有價值的。 –

+0

1.第2號。是的。 3.詳細說明_「它沒有工作」_ –

+1

你的第二個例子在結構聲明後遺漏了';'。 –

回答

0

int * a;和int * a;是相同的。這裏的指針空白是完美的,不會改變任何意義。

隊列節點q應該工作。但也許用更多的細節問一個不同的問題。我附上了一些工作代碼,確實可以運行queue<node> q;

#include <iostream> 
#include <queue> 
using namespace std; 
    struct node 
    { 
    int data; 
    node *left; 
    node *right; 
    }; 

int main() 
{ 
    node *root, *curr, *temp; 
    queue<node> q; 
} 
+0

_「隊列節點q應該工作」_ ???顯示_should work_實際的代碼。 –

+0

我編輯了我的答案以提供工作代碼。 –

0

關於第二個問題,我只想說,無論你寫int* aint *a,它是同一個東西。

int* a; 
int *a; 
int * a; 

全部相同,其中a是一個指向int類型的,事實上int*a;是相同的也...

+0

這已經有一個重複的問題。 –

1

是兩個代碼代表同樣的事情?

它們幾乎代表相同的東西,除了第一個定義爲nodeptr作爲typedef ed名稱。

是int * a和int * a表示同樣的東西嗎?

是的。

對於第一代碼時,我聲明:queue <nodeptr>q它的工作,但對於第二個代碼,當我在代碼中聲明:queue <node>q它並沒有奏效。爲什麼?

queue<nodeptr> qqueue<node*> q相同。因此比較是不恰當的。

如果您使用C++ 11,則應該可以使用queue<node>。看到它在http://ideone.com/tkij08工作。

+0

關於本地結構,自C++ 11以來一直不錯。 – juanchopanza

0
  1. 差不多。兩者都定義了struct node,但第一個也定義了指向struct node的指針的類型,其名稱爲nodeptr

  2. 不,他們是完全一樣的東西。空白或缺少空白並不重要。

  3. 因爲在第一種情況下,你聲明瞭一個指向類型節點的指針隊列,而在第二種情況下,你聲明瞭一個節點類型的對象隊列。 queue大概會對node未滿足的內容提出額外要求。沒有看到queue的來源,很難猜出可能是什麼,但可能需要一個比較運算符來定義某種類型。如果你想知道更多,你應該真正發佈示例源代碼和你得到的錯誤信息,而不是僅僅聲明'它不工作'。