sizeof运算符、malloc函数及free函数
一、sizeof运算符的用法
1.sizeof运算符给出某个类型或变量在内存中所占据的字节数。
int a; sizeof(a)=4; //sizeof(int)=4;
double b; sizeof(b)=8; //sizeof(double)=8;
2.数组的sizeof值等于数组所占用的内存总字节数。
如:char a[] = "yes"; sizeof(a); // 结果为4,字符末尾还存在一个NULL终止符
int a[3]; sizeof(a); // 结果为3*4=12,3个int类型
在学数组和函数那块是遇到的sizeof就是在求数组的长度:
int a = sizeof(a1) / sizeof(a1[]); // 总长度/第一个元素的长度
3. 指针变量的sizeof值与指针所指的对象没有任何关系,所有的指针变量所占内存大小相等。(不同的编译器指针变量所占内存大小不同)
char *p = "abc";
int *q;
string *s;
sizeof( p ); // 结果为4
sizeof( q ); // 结果为4
sizeof( s ); // 结果为4
如果操作数是函数中的数组形参或函数类型的形参,sizeof给出其指针的大小。
void (*p)();// 函数指针
sizeof( p );// 结果为4
二、malloc函数(内存的动态分配)
1.malloc函数原型:
void *malloc(unsigned int size);
malloc向系统申请分配指定size个字节堆内存连续空间,返回类型是 void* 类型,void* 表示未确定类型的指针。在C语言中,void* 类型可以强制转换为任何其它类型的指针。
p = malloc (sizeof(int)*n);//隐式类型转换,分配n个整数内存空间
p = (int *) malloc (sizeof(int)*n);//显式强制类型转换,分配n个整数内存空间
函数返回值是所分配区域的第一个字节的地址,如果申请分配内存失败,则返回空指针(NULL)。
2.申请了内存空间后,必须检查是否分配成功。
q=(DLNode *)malloc(sizeof(DLNode));
if(!q) return OVERFLOW;
3.虽然malloc()函数的类型是(void *),任何类型的指针都可以转换成(void *),但习惯上进行显式强制类型转换。
三、free函数的用法
1.free函数原型:
void free(void *p);//无返回值
free()函数释放变量p所指向的动态内存空间,p应该是最近一次调用malloc函数时得到的函数返回值。
free( p );//释放动态空间
2.当不需要再使用申请的内存时,一定要记得释放,如果申请后不释放就会造成内存泄漏。
3.malloc函数和free函数应该是配对使用的,且释放只能一次。
最后,sizeof在后面的结构体和联合体中用的会更深入一些,待学到那块时再来补充总结。
sizeof运算符、malloc函数及free函数的更多相关文章
- sizeof运算符和strlen函数的区别
1.sizeof是运算符,而strlen是函数. 2.sizeof操作符的运算结果为size_t,他在头文件中的typedef为unsigned int.该类型保证能容纳所操作对象的最大字节大小. 3 ...
- 深入理解类成员函数的调用规则(理解成员函数的内存为什么不会反映在sizeof运算符上、类的静态绑定与动态绑定、虚函数表)
本文转载自:http://blog.51cto.com/9291927/2148695 总结: 一.成员函数的内存为什么不会反映在sizeof运算符上? 成员函数可以被看作是类 ...
- sizeof运算符和strlen()函数
首先放上代码和运行结果.(在VC6.0上运行) #include<stdio.h> #include<string.h> int main(void) { char s1[]= ...
- C语言中malloc()和calloc()c函数用法
C语言中malloc()和calloc()c函数用法 函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别. malloc()函数有一个参数,即要分配的内存空间的大小: ...
- C++malloc,calloc,realloc,free函数
在进行C/c++编程的时候,需要程序员对内存的了解比较清楚,经常需要操作的内存可分为下面几个类别: 1.堆栈区(stack):由编译器自动分配与释放,存放函数的参数值,局部变量,临时变量等等, ...
- malloc,free,calloc,realloc函数
malloc函数 原型:extern void* malloc(unsigned int size): 功能:动态分配内存: 注意:size仅仅为申请内存字节大小,与申请内存块中存储的数据类型无关,故 ...
- malloc函数、calloc函数和free函数
malloc函数和free函数 malloc函数原型:void *malloc(long NumBytes) malloc原型说明:mallco函数在堆分配了NumBytes个字节的内存空间,用来存放 ...
- 重载运算符:类成员函数or友元函数
类成员函数: bool operator ==(const point &a)const { return x==a.x; } 友元函数: friend bool operator ==(co ...
- C++学习之路—运算符重载(二)运算符重载作为类的成员函数和友元函数
(根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 对运算符重载的函数有两种处理方式:(1)把运算符 ...
随机推荐
- python之路——常用模块
阅读目录 认识模块 什么是模块 模块的导入和使用 常用模块一 collections模块 时间模块 random模块 os模块 sys模块 序列化模块 re模块 常用模块二 hashlib模块 con ...
- C - Gravity Flip
Problem description Little Chris is bored during his physics lessons (too easy), so he has built a t ...
- Dubbo的@Reference和@Service说明---1Reference用在消费者2Service用在提供者【import com.alibaba.dubbo.config.annotation.Service;】
@Reference 用在消费端,表明使用的是服务端的什么服务@RestControllerpublic class RemoteUserController { @Reference(version ...
- 实例化vue发生了什么(详解vue生命周期)
const app = new Vue({ el:"#app', data:{ message:'hello,lifePeriod' }, methods:{ init(){ console ...
- [2月1号] 努比亚全机型ROM贴 最全最新NubiaUI5.0 ROOT 极速体验
前言 感谢在开发过程中mandfx和dgtl198312予以的帮助!本帖将整理所有Nubia手机的最新刷机包,还有少数机型未制作刷机包,需要的机油可以联系我制作recovery以及刷机包加群23722 ...
- 【SQL】含有NULL值的排序
查询结果中有NULL值,当进行升序排序时,NULL值默认为“最大值”,排在最后面.要想改变NULL值的显示顺序,只需要在SQL语句后面加上NULLS FIRST(排在前面),NULLS LAST(排在 ...
- 国内DNS服务器地址
114DNS114.114.114.114114.114.115.115 腾讯119.29.29.29 百度180.76.76.76 阿里223.5.5.5223.6.6.6 [THE END]
- weblogic详解
一.简介 WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发.集成.部署和管理大型分布式Web ...
- centos7下安装python3 解决openssl等一系列问题
最近折腾了下centos7,发现按正常方法安装python3.7后面会出现各种操蛋的问题. 主要的问题有三个,openssl版本过低,'_ctypes'缺失,以及安装后sqlite3缺失.下面我会贴出 ...
- POST请求成功,但接口返回数据不正确
事件:使用Jmeter做APP的搜索接口测试,请求成功了,但无论keyword是什么“内容”(这里的内容是带引号的哦),接口返回的内容都是:未匹配到搜索结果 排查问题: keyword=“世界” st ...