malloc函数的补充

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,509评论 3 44
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,940评论 1 10
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,131评论 19 139
  • 重点掌握 3 类对象和方法 对象就是一个物体 类的独特存在就是一个实例,对实例进行操作叫做方法。方法可以应用于类或...
    Coder大雄阅读 1,287评论 0 2
  • 其实我一直在被这个问题困扰:不能为身边人的成功感到随喜,尤其是在工作环境中。 同事的那位小姑娘,每当她业绩做...
    皓月当空舞阅读 1,088评论 1 0