malloc函数的补充

2017-11-11  本文已影响0人  梦在原点

上一篇关于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));
}

运行结果如下:


image.png

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


image.png
可以看到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));
}

输出的结果变成了这样

image.png

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


image.png

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

上一篇 下一篇

猜你喜欢

热点阅读