2016-11-20 69 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