何时使用或何时不使用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结束输入")
    whilex!=-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 *SS->data=x;

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

LINKLIST *SLINKLIST 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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何安装wget_ubuntu安装unzip命令

    如何安装wget_ubuntu安装unzip命令今天给服务器安装新LNMP环境时,wget时提示-bash:wgetcommandnotfound,很明显没有安装wget软件包。一般linux最小化安装时,wget不会默认被安装。可以通过以下两种方法来安装:1、rpm安装rpm下载源地址:http://mirrors.163.com/centos/6.2/os/x86_64/Packages/下载wget的RPM包:htt…

    2022年10月17日
    8
  • django 模糊查询

    django 模糊查询fromdjango.shortcutsimportrenderfrom.modelsimportBook#Createyourviewshere.defindex(req):books=Book.objects.filter(name__contains="python")returnrender(req,"index.html",{"…

    2022年5月23日
    59
  • Matlab中length函数的使用

    Matlab中length函数的使用目录一.语法1.输入参数二.说明三.示例1.向量元素数2.矩形矩阵的长度3.字符串数组4.结构体字段的长度length函数是求最大数组维度的长度。一.语法L=length(X)1.输入参数X-输入数组标量|向量|矩阵|多维数组输入数组,指定为标量、向量、矩阵或多维数组。复数支持:是提示 要计算字符串或字符向量中的字符数量,请使用strlength函数。 length不对表执行运算。要检查…

    2022年6月4日
    67
  • Java xml格式化工具「建议收藏」

    Java xml格式化工具「建议收藏」Javaxml格式化工具Java实现xml格式化工具代码地址:https://github.com/xiaxveliang/JavaTool_XmlValidate运行效果点击“乘1.5”按钮后的运行效果

    2022年7月16日
    15
  • 深度信念网络DBN的一个matlab实例「建议收藏」

    关于深度学习的一些个人浅见:   深度学习通常是训练深度(多层)神经网络,用于模式识别(如语音、图像识别);深度网络指是具有深层(多层)网络结构的神经网络。   深层网络由于神经元多,参数多,拟合表现能力强,有表现欲解决复杂问题的能力。   但是深度网络存在很多局部最优解,深度网络的训练容易停留在局部最优上,初始参数的选择对网络最终收敛在那个位置有很大的影响。

    2022年4月12日
    192
  • SVR回归_时间序列分析优缺点

    SVR回归_时间序列分析优缺点文章目录1.SVR时间序列预测2.SVR调参3.SVR高斯核与过拟合1.SVR时间序列预测SVR可用于时间序列分析,但不是较好的选择。现在一般采用LSTM神经网络来处理时间序列数据#SVR预测#也可用于时间序列分析(ARIMA也可用于时间序列分析)importnumpyasnpfromsklearnimportsvmimportmatplotlib.pyplotaspltif__name__==”__main__”:#构造数据N=50

    2025年7月29日
    2

发表回复

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

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