何时使用或何时不使用malloc函数

何时使用或何时不使用malloc函数在初学数据结构时,我们往往不太清楚在定义一个结构体指针时要不要使用malloc函数。例如以下的代码:LINKLIST*initlinklist(){LINKLIST*H=NULL;LINKLIST*S;intx;printf(“请输入链表元素或以-1结束输入”)while(x!=-1){s=(LINKLIST*

大家好,又见面了,我是你们的朋友全栈君。

在初学数据结构时,我们往往不太清楚在定义一个结构体指针时要不要使用malloc函数。
例如以下的代码:

LINKLIST  *init linklist()
{
    LINKLIST *H=NULL;
    LINKLIST *S;
    int x;
    printf("请输入链表元素 或以-1结束输入")
    while(x!=-1)
    {
    s=(LINKLIST*)malloc(sizeof(LINKLIST));
    s->data=x;
    s->next=H;
    H=s;
    scanf(%d,&x);
    }
retrun H;
}

在定义结构体指针变量S时需要用到malloc函数
而定义结构体指针变量H时则没有用到malloc函数
S和H的区别所在是:H没有指向有效地内存地址,而S指向了有效地内存地址,因为S指向了有效地内存地址所以可以往S指向的内存地址里面写值:S->data=x;而在后来H指向的地址就是每一个新的S指向的地址:H=S;
再举个例子

LINKLIST *S;
S->data=x;

以上这两句代码是不行的,因为S没有指向确切的地址,所以不能通过S来向它要指向的地址赋值;
但是

LINKLIST *S;
LINKLIST P;
S=&P;
S->data=x;

是可以的,因为S指向P的地址,S->data=x;等同于p.data=x;
而malloc的作用就类似以上代码的作用;但是不用再定义一个结构变量P,再让结构体指针变量S指向它的地址&P,而是直接使用malloc函数让结构体指针变量S指向一个确切的内存地址。

LINKLIST *s;
s=(LINKLIST*)malloc(sizeof(LINKLIST));
s->data=x;

再举一个简单的例子

int * i;
*i=1;

错误
而

int * i;i=(int*);
i=malloc(sizeof(int));
*i=1;

确是正确的

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134101.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PLSQL Developer(安装、连接、汉化、注册图文教程)[通俗易懂]

    PLSQL Developer(安装、连接、汉化、注册图文教程)[通俗易懂]PLSQLDeveloper(安装、连接、汉化、注册图文教程)一、安装PLSQLDeveloper—版本11.0.5.1790(64bit)1、解压oracle客户端到d盘某个目录。2、安装PLSQLDeveloper开发工具,点击plsqlev1105.exe,开始进入安装界面,点击Next。3、同意协议,Next。

    2022年6月22日
  • virsh 关机_kvm 虚拟化 virsh shutdown 无法关闭虚拟机[通俗易懂]

    virsh 关机_kvm 虚拟化 virsh shutdown 无法关闭虚拟机[通俗易懂]问题:安装kvm虚拟化并且安装客户机之后,通过virshshutdown命令无法关闭客户机,只能通过virshdestroy进行强制关闭电源。虽然这也是一种方法,但是直接断电显然有点不妥,并且你并不知道何时会出现一些奇奇怪怪的问题。在下图中我分别对客户机centos6.5和hongxuecentos6.5试图执行virshshutdown进行正常关闭,输出信息为:D…

    2022年8月11日
  • WIN7 Microsoft Platform SDK Febrary 2003 安装[通俗易懂]

    WIN7 Microsoft Platform SDK Febrary 2003 安装[通俗易懂]windows7安装了VC没有太多的问题,顺便也装下VC6最后一个可用的SDK从网上搜索windowsplatformsdk2003下载http://download.microsoft.com/download/platformsdk/sdk/update/win98mexp/en-us/3790.0/FULL/PSDK-FULL.1.cabhttp://do

    2022年6月1日
  • 数据库6「建议收藏」

    数据库6「建议收藏」https://www.cnblogs.com/zhanht/p/5450559.html本文主要介绍MySQL中关于索引的一些问题,例如:索引的作用;怎么创建索引;设计索引的原则;怎么优化索引等

    2022年7月4日
  • pycharm 掌握这些快捷键,你就是大神!!

    pycharm 掌握这些快捷键,你就是大神!!最重要的快捷键1.ctrl+shift+A:万能命令行2.shift两次:查看资源文件新建工程第一步操作1.module设置把空包分层去掉,compactemptymiddlepackage2.设置当前的工程是utf-8,设置的Editor–>FileEncodings–>全部改成utf-8,注释1.ctrl+/:单行注释…

    2022年8月26日
  • oracle模糊查询方法_oracle模糊查询下划线

    oracle模糊查询方法_oracle模糊查询下划线在这个信息量剧增的时代,如何帮助用户从海量数据中检索到想要的数据,模糊查询是必不可少的。那么在Oracle中模糊查询是如何实现的呢? 一、我们可以在where子句中使用like关键字来达到Oracle模糊查询的效果;在Where子句中,可以对datetime、char、varchar字段类型的列用Like关键字配合通配符来实现模糊查询,以下是可使用的通配符:(1)%:零或者多个字符,

    2022年4月19日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号