关于malloc和sizeof的用法

摘要:
sizeof的用法:这是一个运算符sizeof或sizeof变量名,用于获取对象或类型占用的内存字节。Q2:L元素=malloc;在if(!“);exit;}()malloc和sizeof()之后添加此句子在3L=malloc中括号中的含义是什么?Malloc是一个动态打开的内存。函数返回的void指针前面的括号是打开的内存类型。例如,L=malloc是将原始malloc返回的void指针强制定义为LinkList指针,以便将其分配给L Sizeof。Sizeof是指malloc打开的内存空间的大小。这里,它是指LNode占用的容量

问题1:

1.
L.elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));

2.
newbase = (ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));

其中L是已经定义的线性表,LIST_INIT_SIZE是线性表存储空间的初始分配量,listsize是当前分配的存储容量(以sizeof(ElemType)为单位)

解释:

第一个句子:
用malloc分配一段这么LIST_INIT_SIZE*sizeof(ElemType)多个字节的内存段,它返回一个指向该内存段首字节的指针变量,然后把这个指针变量强制转换为ElemType*类型,再把这个经转换的指针变量赋给L的elem成员
第二个句子:
先看一段话:
realloc语法:指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。//新的大小一定要大于原来的大小,不然的话会导致数据丢失!
所以你这个句子的意思是:把L的elem指向的那段内存扩大LISTINCREMENT*sizeof(ElemType)个字节。
sizeof的用法:这是一个运算符(而不是一个函数,这点认识很重要)
sizeof(类型说明符,数组名或表达式)

sizeof 变量名
得到一个对象或者类型所占的内存字节数。
例如,如果你的机器上int占4字节,那么sizeof(int)就是4
malloc用法:
它是一个函数,原型是void *malloc(size_t size); 
前面提过了,就是分配size个字节的内存,然后返回指向这段内存首字节的指针,void* 表示未确定类型的指针,void *可以指向任何类型的数据,更明确的说是指申请内存空间时还不知道用户是用这段空间来存储什么类型的数据(比如是char还是int或者...),所以你要用它指向什么数据,一般就要在malloc前加一个强制转换,把这个指针转为适合你使用的类型。

问题2:

L.elem =(int*)malloc(LIST_INIT_SIZE * size(int)); 后面加这句话if(!L.elem) exit(OVERFLOW); 
貌似是不对的?
这个是个指针,那你去非也不一定为0
if(L.elem == NULL)
  {
  printf( "不能成功分配存储空间。");
  exit(1);
  }
问题3
L=(LinkList)malloc(sizeof(LNode))中()malloc和sizeof()括号里分别是什么含义,
malloc是动态开辟内存,函数返回为void型指针(指向开辟的内存空间)
前面那个括号是开辟内存的类型,如L=(LinkList)malloc(sizeof(LNode)),就是将原来malloc返回的void型指针强制定义为LinkList型(也就是你一开始定义的指针L的类型),这样才可以赋值给L.
sizeof(LNode)是指malloc开辟的内存空间的大小,这里就是指,这个大小为LNode型所占的容量.(例如sizeof(int),就是开辟一个整形的空间(4字节).分配两个int的空间就是2*sizeof(int))

免责声明:文章转载自《关于malloc和sizeof的用法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Content:"2715",特殊字符和图标Jsonp跨域请求下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

标准C程序设计七---32

Linux应用 编程深入 语言编程标准C程序设计七---经典C11程序设计以下内容为阅读:《标准C程序设计》(第7版) 作者:E. Balagurusamy(印), 李周芳译 清华大学出版社 2017.7《21天学通C语言》(第7版) 作者:Bradley Jones Peter Aitken Dean Miller(美), 姜佑译 人民邮电出版社 201...

IOS基础之 (十) 内存管理

一 基本原理 1.什么是内存管理 移动设备的内存有限,每个app所能占用的内存是有限制的。 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间。比如回收一些不需要使用的对象,变量。 管理范围:任何继承了NSObject,对其他基本数据类型(int, char, float, double,struct,enum等)无效。...

C#学习之unsafe

为了保持类型安 全,默认情况下,C# 不支持指针算法。不过,通过使用 unsafe 关键字,可以定义可使用指针的不安全上下文。 unsafe 在C# 程 序中的使用场合: 1)实时应用,采用指针来提高性能; 2)引用非.net DLL提供的如C++编写的外部函数,需要指针来传递该函数; 3)调试,用以检测程序在运行过程中的内存使用状况。 使用unsafe...

怎样编写NES模拟器

怎样写模拟器作者: Nikolas GavalasEmail: thundermahoney@hotmail.com 怎样写模拟器简介阶段读入运行获得 ROM 的操作码执行操作码执行中断读写内存做循环任务视频模拟声音模拟优化课程收获我的模拟器参考文献 +------+| 简介 |+------+ 模拟你喜欢的系统来玩游戏比你想象的要简单 (简单程度依赖于你...

java集合类笔试选择题整理含答案

1、ArrayList list=new ArrayList(20);中的list扩充几次()A. 0B. 1C. 2D. 3答案:A分析:已经指定了长度, 所以不扩容2.List、Set、Map哪个继承自Collection接口,一下说法正确的是()A. List MapB. Set MapC. List SetD. List Map Set答案:C分析...

C语言中查看类型的大小(占几个byte)

/*sizeof是C语言的内置运算符,以字节为单位给出指定类型的大小。 C99和C11提供%zd转换说明匹配sizeof的返回类型[2]。 一些不支持C99和C11的编译器可用%u或%lu代替%zd *//* typesize.c -- 打印类型大小(单位是字节) */ #include <stdio.h> int main(void) {...