C语言数据结构理解语句L = (LNode * )malloc(sizeof(LNode));
对于刚开始学数据结构的同学来说,在初始化单链表的算法中,语句//L = (LNode * )malloc(sizeof(LNode));//可能不太好理解(至少我是这样)。那么下面我就来详细的解释一下该语句:
#include<stdlib.h>//构造单链表数据
typedef struct LNode{ElemType data; struct LNode *next;
}LNode;//初始化线性表
void InitList(LNode *&L){L = (LNode * )malloc(sizeof(LNode));L -> next = NULL;
}
↑↑↑上面就是初始化单链表的基本语句。
malloc()函数的作用是在内存中开辟一个空间。那么要开辟多大的空间呢,用操作符"sizeof"计算。是的,sizeof不是一个函数,是一个操作符,和" + "," - "," * "," / "一样是操作符。计算出开辟的空间有"LNode"这个结构体那么大,LNode这个结构体包含了数据域和指针域,数据域用来存放数据元素,指针域用来存放下一个数据结点的地址。作为头结点,其数据域一般不做赋值。
因为头部文件调用了"#include<stdlib.h>",所以malloc()函数的返回值类型是(void * )型,所以要用(LNode * )强制转换为指针类型,然后赋值给指针变量L。如果没有头部文件"#include<stdlib.h>",malloc()函数默认返回 int 型,此时就不能强制转换为指针类型了。
然后通过指针L在内存中找到该结点,并将该结点的next域设为空,这样一个带头结点的空链表就形成了。
假设头结点在内存中的地址为001x
" L = (LNode * )malloc(sizeof(LNode)) "语句如下解读:
[1] sizeof(LNode):首先操作符sizeof计算结构体LNode所占的空间
[2] malloc(sizeof(LNode)):用操作符sizeof计算完空间,再用malloc()函数,在内存中开辟结构体"LNode"那么大的空间,001x(假设)为该空间的地址。
[3] (LNode * )malloc(sizeof(LNode)):头部文件调用"#include<stdlib.h>",malloc()函数返回类型为(void * ),由于 L 是指针变量,直接赋值肯定报错,所以要将malloc()函数的返回值,用(LNode * )强制装换为指针类型
[4] L = (LNode * )malloc(sizeof(LNode)):将头结点的地址赋值给指针L,所以现在可以通过指针L访问该节点了。
这里值得注意的是,在C语言中,用malloc()函数开辟出来的空间,是在堆内存里保存的,简单来说就是,只要程序在运行,只要不用语句释放这块空间,比如free()函数,这块空间就会一直存在,除非关闭这个程序,这块空间才会被系统回收。这个细节在销毁单链表语句中会用到。
C语言数据结构理解语句L = (LNode * )malloc(sizeof(LNode));相关推荐
- 数据结构中的L=(List)malloc(sizeof(PtrToNode));是什么意思
sizeof函数(sizeof函数百度百科) 用于计算数据(包括数组.变量.类型.结构体等)所占用的内存空间,用字节数表示.在L=(List)malloc(sizeof(PtrToNode));中,s ...
- 肝下十万字的《数据结构考研》笔记,你对数据结构理解水平将从入门到入魔❤️
第一章 绪论 1.1基本概念 1.1.1基本术语 相关术语:数据.数据元素.数据对象.数据类型和数据结构. 数据(data)是对客观事物的符号表示,它能被计算机识别.存储和加工处理,它是计算机 ...
- C语言数据结构 单链表的建立、遍历、查找、插入和删除操作
参考文献 本博文为半摘记性质 -- 声明:全文主干部分摘自 [1] 杨智明. 数据结构(C语言版)[M]. 第一版. 北京:北京理工大学出版社, 2016. [2] 严蔚敏, 李冬梅, 吴伟民. 数据 ...
- C语言-数据结构-单链表的初始化,插入和输出
[问题描述] 设有头结点单链表,实现单链表的初始化.插入和输出算法. [输入形式] 第一行输入一个N(N大于等于1,小于1000),一个M(N大于等于1,小于1000): 第二行输入N个整数,以空格作 ...
- c语言数据结构linklist用法,C语言数据结构-线性链表LinkList
1. 头结点表示链表中第一个结点的存储位置 2. 最后一个结点的存储位置为空(NULL); #ifndef __LINKLLIST_H__ #define __LINKLLIST_H__ #defin ...
- c语言数据结构单链表
#include<stdio.h> #include<stdlib.h> typedef int elemtype; typedef struct LNode { el ...
- c语言图书馆管理系统中数据存放位置,c语言数据结构图书馆系统
//#define var 333; //移动光标位置 void gotoxy(int x,int y) { COORD xy; HANDLE hstdout; hstdout=GetStdHandl ...
- C语言数据结构(大话数据结构——笔记1)数据结构绪论、算法、线性表
[C语言描述]<数据结构和算法> 说是这个教程是按照<大话数据结构>这本书来编写的:数据结构与算法经典书籍--大话数据结构(带配套源码) ↑废话太TM多了,换一个! [搞定数据 ...
- C语言数据结构-第二章线性表-电大
第二章线性表--内容简介 本章将进入线性结构的学习. 线性结构是最简单.最常用的一种数据结构. 本章将学习线性表的定义.顺序和链式两种存储方式及相应存储结构上的运算实现.通过典型示例训练,掌握线性表的 ...
- 字符串基本操作 c语言,数据结构C语言字符串的基本操作.doc
数据结构C语言字符串的基本操作 串的基本操作 #include #include #include #define m 100 typedef struct{ char ch[m]; int leng ...
最新文章
- 数据治理(一):为什么要数据治理
- .NET 4.0 Interop新特性ICustomQueryInterface (转载)
- 二条件if else语句可以用离散二分布概率函数实现
- docker commit 发布自己的镜像
- python数据科学-多变量数据分析
- 《Python程序设计》——1.2 程序开发周期
- python与excel-Python 与 Excel 不得不说的事
- 在Linux的Terminal中显示文本文件特定行的内容
- Windows每月更新补丁离线安装包下载
- 坚持练字一年是什么样的体验?
- 国产管理软件勒索病毒大爆发
- JAVA高级应用课程设计(网上书城系统——会员登陆模块的设计与实现)
- 微信罕见出手,再造一个万能的电商平台!
- 贪吃蛇之一维数组实现
- 基于服务器端的三维渲染技术
- 【P4论文分享】基于P4的可编程数据平面研究及其应用
- CST微波工作室学习笔记2 主要特点
- itext html转换为pdf排版错乱,使用iText库将html转换为pdf时不适用hr的Inline CSS
- 计算机上m键mm代表什么意思,M与MM分别代表什么?What does M and MM stand for?
- 前端实现右键自定义菜单
热门文章
- VBA笔记 退出循环、Sub、Fuction等的Exit语句
- vscode自动快捷格式化代码_vscode格式化代码快捷键_解锁格式化的快捷键
- html制作动物百科网站,Steam疯狂周三游戏推荐:动物百科全书
- 种草推荐redis客户端
- 案例研究:手机APP的UI设计流程
- selenium+java+chrome环境搭建
- 学习Python的pyecharts的过程中踩到的一些坑
- Mesh平滑处理的几种算法比较
- 三维匹配_为什么你的倾斜摄影三维建模模型效果差,都进来看看
- 【实习之T100开发】T100 单档程序开发,java工程师面试突击中华石杉