malloc函数的补充

上一篇关于malloc的介绍
先观察以下代码

#include
#include
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));
}

运行结果如下:


malloc函数的补充_第1张图片
image.png

取消掉init(&S)的注释
运行结果如下:


malloc函数的补充_第2张图片
image.png

可以看到malloc函数为结构体STACK里面的两个指针变量附上了新的值,也就是这个指针指向了一个真正的结构体变量。
再将代码修改成这种格式
#include
#include
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));
}

输出的结果变成了这样

malloc函数的补充_第3张图片
image.png

STACK结构体里面的两个指针指向的结构体变量里面的值是系统自动分配的值
如果将init(&S)注释掉


malloc函数的补充_第4张图片
image.png

也就是说我不去给指针分配指向的结构体变量,那想要通过这个指针去访问指针所指向的值是根本不行的。

你可能感兴趣的:(malloc函数的补充)