c语言指针必须初始化为空,C语言指针未初始化情况

#include

#include

#include

typedef struct node Node,*P_Node;

struct node

{

int data;

P_Node next;

int *p2int;

};

int main(void)

{

int a;

int *p_int;

Node node;

P_Node p_node;

printf(" a=%d , p_int=%p ,\n Node.data=%d ,node.nex=%p , Node.p2int=%p\n", \

a,p_int,node.data,node.next , node.p2int);

printf("p_node=%p \n",p_node);

printf("&node=%p\n",&node);

p_node = (P_Node)malloc(sizeof(Node));

printf("=====after malloc the space!======\n");

printf("p_node=%p\n",p_node);

printf("p_node->data=%d p_node->next=%p\n" , p_node->data ,p_node->next);

printf("p_node->p2int=%p\n",p_node->p2int);

int *arr = (int*)malloc(sizeof(int)*3);

printf("arr[0..2] = %d ,%d,%d\n",arr[0],arr[1],arr[2]);

return 0;

}

输出结果:

a=32767 , p_int=0x0 ,

Node.data=0 ,node.nex=0x0  ,  Node.p2int=0x0

p_node=0x0

&node=0x7fff59f9fc50

=====after malloc the space!======

p_node=0x7fb8cb4038f0

p_node->data=0 p_node->next=0x0

p_node->p2int=0x0

arr[0..2] = -1951222467 ,32767,-1900194516

运行环境:

mac +gcc4.7

分析, 栈上由编译器开辟的空间,a初值为“乱数”,指针p_int为0。在栈上开辟的结构体,为初始化时,其成员变量无论原始类型或指针类型值都为0;

在堆上用malloc开辟的空间,成员变量值为0;开辟的连续空间,如   int *arr = (int*)malloc(sizeof(int)*3) 每一个元素值为“乱数”

分析这个问题的意义:  在C语言中布尔运算,0为假,非0为真。 故而有 while(p->next){...}这类写法。

注意,初值是0 还是“乱数” 完全由编译器决定, 上述讨论只限于 GCC, 对其他编译器需要验证。

你可能感兴趣的:(c语言指针必须初始化为空)