上一篇关于malloc的介绍
先观察以下代码
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int data;
struct Node* next;
}NODE,*PNODE;
typedef struct Stack
{
PNODE pTop;
PNODE pBottom;
}STACK,*PSTACK;
void init(PSTACK);
int main(void)
{
STACK S;
PSTACK P;
//init(&S);
P=&S;
printf("%d,%d,%d",P->pTop,P->pBottom,P);
return 0;
}
void init(PSTACK Ps)
{
Ps->pTop=(PNODE)malloc(sizeof(NODE));
Ps->pBottom=(PNODE)malloc(sizeof(NODE));
}
运行结果如下:
取消掉init(&S)的注释
运行结果如下:
可以看到malloc函数为结构体STACK里面的两个指针变量附上了新的值,也就是这个指针指向了一个真正的结构体变量。
再将代码修改成这种格式
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int data;
struct Node* next;
}NODE,*PNODE;
typedef struct Stack
{
PNODE pTop;
PNODE pBottom;
}STACK,*PSTACK;
void init(PSTACK);
int main(void)
{
STACK S;
PSTACK P;
init(&S);
P=&S;
printf("%d,%d,%d",P->pTop,P->pBottom,P);
printf("\n");
printf("%d,%d,%d",P->pTop->data,P->pTop->next,P->pTop);
printf("\n");
printf("%d,%d,%d",P->pBottom->data,P->pBottom->next,P->pBottom);
return 0;
}
void init(PSTACK Ps)
{
Ps->pTop=(PNODE)malloc(sizeof(NODE));
Ps->pBottom=(PNODE)malloc(sizeof(NODE));
}
输出的结果变成了这样
STACK结构体里面的两个指针指向的结构体变量里面的值是系统自动分配的值
如果将init(&S)注释掉
也就是说我不去给指针分配指向的结构体变量,那想要通过这个指针去访问指针所指向的值是根本不行的。