#include<stdio.h>
#include<stdlib.h>
#include<math.h>
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, 對其他編譯器需要驗證。