2016-11-20 70 views
0

我對C語言較新。讓我們開始使用下面的測試代碼。C語言如何初始化結構指針

struct node { 
    int data; 
    struct node *next; 
}; 
int main() { 
    struct node *n; 
    struct node *n2; 
    struct node *n3; 
    struct node *n4; 
    struct node *n5; 
    printf("%p\n", n); 
    printf("%p\n", n2); 
    printf("%p\n", n3); 
    printf("%p\n", n4); 
    printf("%p\n", n5); 
    return 0; 
} 

下面的輸出顯示,

0x7fff57c42888 
0x0 
0x0 
0x0 
0x0 

我無法理解該變量n的指針地址不爲空。而且,具有相同*節點類型的其他變量是0X0。 誰能解釋它的原因?謝謝。

+1

的代碼調用**未定義行爲**。 –

+0

函數的局部變量**不是**在'c'中被初始化。你必須自己做適當的初始化。順便說一句 - 在打印一個指針值時,你應該轉換爲'(void *)',就像'printf(「%p \ n」,(void *)n5);' – 4386427

+0

@nm:不會嘗試使用任何指針爲了訪問內存。爲什麼未定義的行爲? –

回答

2

您只需打印出非初始化指針的值(n,..,n5)。所以不能保證輸出。

就像你打印出int變量初始化無它:

int i; 
printf("%d", i); // what would you expect? - no guarantee, maybe 0, maybe 7