美文网首页
malloc函数的补充

malloc函数的补充

作者: 梦在原点 | 来源:发表于2017-11-11 11:51 被阅读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

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

相关文章

网友评论

      本文标题:malloc函数的补充

      本文链接:https://www.haomeiwen.com/subject/irfwmxtx.html