C语言如何初始化结构指针

C语言如何初始化结构指针,c,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); print

我对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。
谁能解释原因?Thx.

您只需打印出非初始化指针的值(
n
,…,
n5
)。因此,无法保证产量

就像您打印一个
int
变量而不初始化它一样:

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

您只需打印出非初始化指针的值(
n
,…,
n5
)。因此,无法保证产量

就像您打印一个
int
变量而不初始化它一样:

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

代码调用未定义的行为。函数的局部变量在
c
中不是零初始化的。您必须自己进行适当的初始化。顺便说一句-打印指针值时,您应将其转换为
(void*)
类似
printf(“%p\n”,(void*)n5)@n.m.:不要试图使用任何指针来访问内存。为什么行为不明确?@barakmanos,因为这是标准所说的。就像看一个单位化的指针一样重要。复制一个,砰!乌兰巴托。根本不需要取消引用。@barakmanos-您的
int
示例也是UB,AFAIK。我记得,在没有UB的情况下,您可以读取的唯一未初始化变量类型是
unsigned char
。代码调用未定义的行为。函数的局部变量在
c
中不是零初始化的。您必须自己进行适当的初始化。顺便说一句-打印指针值时,您应将其转换为
(void*)
类似
printf(“%p\n”,(void*)n5)@n.m.:不要试图使用任何指针来访问内存。为什么行为不明确?@barakmanos,因为这是标准所说的。就像看一个单位化的指针一样重要。复制一个,砰!乌兰巴托。根本不需要取消引用。@barakmanos-您的
int
示例也是UB,AFAIK。我记得,在没有UB的情况下可以读取的唯一未初始化变量类型是
unsigned char