一、malloc函数
/*
首先需要导入头文件 #include
malloc
void* malloc(n);
n是字节大小
开辟堆空间,开辟的字节数以n为准
返回的是开辟空间的首地址
void*是万能指针,也就是说你可以用任意类型的指针去指向
*/
//malloc用法
int *p = malloc(sizeof(int));
*p = ;
printf("%p %d\n",p,*p);//0x100105490
char *pc = malloc(sizeof(char)*);
pc[]= 'a';
pc[] = 'b';
pc[] = 'c';
pc[] = '\0';
printf("%s\n",pc);
char *pc = malloc();
*pc = 'a';
*(pc+) = 'b';
*(pc+) = 'c';
*(pc+) = '\0';
printf("%s\n",pc);
char *pc = malloc();
char *temp = pc;
*pc = 'a';
pc++; //自身+1
*pc = 'b';
pc++;
*pc = 'c';
pc++;
*pc = '\0';
printf("%s\n",temp);
char *pc = malloc();
*pc = 'h';
printf("%c\n",*pc);
二、calloc函数
//calloc用法
int nums[] = {,,};//在栈区
int *p = calloc(, );//在堆区
p[] = ;
p[] = ;
p[] = ;
for (int i =; i
printf("%d\n",p[i]);
}
int *p = calloc(, );//在堆区
*(p) = ;
*(p+) = ;
*(p+) = ;
for (int i =; i
printf("%d\n",p[i]);
}
malloc和calloc的区别:
malloc不会初始化,会有垃圾值,calloc会初始化为0
char *pch = malloc();
for (int i =; i
printf("%d ",*(pch+i));
}
printf("\n------------分割线-------------\n");
char *pch2 = calloc(, );
for (int i =; i
printf("%d ",*(pch2+i));
}
三、realloc函数
/*
当自己手动开辟出来的空间不够用了,这个时候我们需要去扩容,就得用到realloc这个函数。
realloc:
realloc(要扩容的空间首地址,操作后的字节大小);
作用:把你传入的空间进行扩容或者缩小,操作后的字节大小以后面的参数为准。
注意:用realloc函数的时候最好再用指针变量接收一下返回值。
因为你扩容的时候,很可能是系统帮你在一块新的足够大的空间里面进行扩容了,那样空间首地址就发生改变了。
*/
//realloc的使用
char *p = malloc();
*p = "的手机客户端还是把空间分布的刷卡缴费多少部分科技的设备房间号多少功夫空间都是给我看一个";
//所以要重新接收一下
p = realloc(p, );//放大
p = realloc(p, );//缩小
四、内存泄露
/*
内存泄露:
内存容量有限,然后如果你不及时回收不要用的空间,而是一直开辟新的空间,那么内存就会不够用,就叫内存泄露(像水杯装水一样)。
代码里面:某块空间一直占据,没被回收就叫内存泄露。
回收自己开辟的堆空间:
free:
free(要回收的空间首地址);
野指针:指向的是已被回收的空间的指针叫野指针。指向不可用的内存空间叫野指针。
防止野指针:
就是在回收后,立即将指针变量置为NULL。
*/
int *p = malloc();//内存泄露
//因为没有对p指向的堆空间进行回收,所以就内存泄露
//那么程序自己怎么回收??
free(p);//此时p指向的空间首地址就被回收了,此时p变为野指针
p = NULL; //p指向的空间被回收后,要立即把p置为NULL,防止野指针错误
c语言学习之基础知识点介绍(九):预处理指令和多文件开发
一:预处理指令 /* 预处理指令: 作用:在程序编译之前做一些操作. 预处理命令写法的共同特点:都是以#号开头. 文件包含指令:#include 是一个文件包含命令. 作用:把某个文件内的内容读取出来 ...
c语言学习之基础知识点介绍(八):函数的基本用法
本节开始说函数. 一.函数的基本用法 /* 作用:可以实现代码的复用,在一定程度上解决代码冗余的问题:方便后期维护. 语法: void 函数名(){ 函数体; } 函数命名要有意义,遵守驼峰命名法. ...
c语言学习之基础知识点介绍(三):scanf函数
本节继续介绍c语言的基础知识点. scanf函数:用来接收用户输入的数据. 语法:scanf("格式化控制符",地址列表); 取地址要用到取地址符:&(shift+7) 例 ...
c语言学习之基础知识点介绍(二):格式化控制符和变量的补充
上节简单介绍了c语言中的一些基础知识点,本节将对之前介绍的不够详细的知识点进行补充. 格式化控制符的消息介绍: %d的其他控制符: 1.%md:m代表这个整数位占用多少位,m是一个整数.实际数字不足的 ...
c语言学习之基础知识点介绍(六):if和switch结构
本节主要说c语言中的分支结构. c语言中分支结构有两大类:一种是if,一种是switch. 一.if结构 //if结构,语法: //第一种: if(表达式){ //语句块 } //第二种: if(表达 ...
c语言学习之基础知识点介绍(十四):指针的进阶
一.指针的加.减法运算 /* 1.加法运算 1).可以跟整数进行加法运算,得到的还是一个地址 公式: 地址 + 1 = 地址 + 1 * 类型所占的字节数 地址 + n = 地址 + n * 类型所占 ...
c语言学习之基础知识点介绍(十):数组
本节主要介绍数组. 一.数组 /* 数组:一个变量可以存n个变量. 语法:类型 数组名[长度(正整数)]; 例如:int score[5];//定义了一个int类型的数组,长度为5,可以保存5个数据. ...
c语言学习之基础知识点介绍(二十):预处理指令
一.预处理指令的介绍 预处理命令:在编译之前触发的一系列操作(命令)就叫预处理命令. 特点:以#开头,不要加分号. #include: 文件包含指令 把指定文件的内容复制到相应的位置 #define: ...
c语言学习之基础知识点介绍(十五):函数的指针
一.函数的指针的介绍 /* 函数指针: 函数的指针,本质上一个指针 指向函数的指针,就是一个函数指针. 回忆:我们写的源代码编译成二进制的指令集,一串交给CPU执行的指令 先存在内存里面,然后CPU读 ...
c语言学习之基础知识点介绍(十二):结构体的介绍
一.结构体的介绍 /* 语法: struct 结构体名{ 成员列表; }; 切记切记有分号! 说明:成员列表就是指你要保存哪些类型的数据. 注意:上面的语法只是定义一个新的类型,而这个类型叫做结构体类 ...
随机推荐
Ansible facts
facts组件是Ansible用于采集被管理机器设备信息的一个功能.可以使用setup模块查机器的所有facts信息,可以使用filter来查看指定信息.整个facts信息被包装在一个json格式的数 ...
与你相遇好幸运,Sails.js自定义数据库名
在/api/models/下,自定义的.js文件内容 module.exports = { tableName: '自定义的数据库名', autoCreatedAt: false, //关闭 au ...
单元测试 mock EF 中DbContext 和DbSet Include
现在EF越来越流行了,很多时候业务成都是直接访问DbContext 和DbSet来操作数据的. 那么我们测试的时候如何来mock这2个对象了?现在时间很晚了, 就直接贴code吧 首先看看的我们DbC ...
Windows8.1 与Ubuntu14.04双系统
机型:联想 Y480 现有操作系统:win8.1 64位 物理内存:8G 磁盘存储:两个硬盘 1. SSD为固态盘 Solid State Drives 110G 现已安装有win8系统 2.H ...
OpenCV实现图像物体轮廓,前景背景,标记,并保存。
#include // for standard I/O #include // for strings #include
JDBC实现简单增删改查
JDBC全称为:Java Data Base Connectivity (java数据库连接),主要用于java与数据库的链接. 整个链接过程如下图: 1.数据库驱动:Driver 加载mysql驱动 ...
IIS 站点部署多级域名
当站点的规模达到一定程度,往往会对业务进行拆分,部署到一台服务器的不同站点,,而一个域名(顶级域名)只能绑定一个站点(核心站点),这个时候就通过给顶级域名创建子域名的方式(理论上一个顶级域名可以绑定5 ...
20162327WJH使用队列:模拟票务站台代码分析
20162327WJH使用队列:模拟票务站台代码分析 用链队实现队列的情况 1.用链表实现队列的代码 关键方法代码及补全代(LinkedOueue类) public void enqueue(T el ...
常用的scrapy setting
原文请参考 Scrapy 爬虫入门教程十三 Settings(设置), 讲的很详细 官网参考 Settings 设置 Scrapy 设置允许您自定义所有 Scrapy 组件的行为,包括核心,扩 ...
mysql自定义变量
mysql可以实现自定义变量,使用方式非常简单,代码如下: SELECT @i:=@i + 1 // 查询变量,值+1 FROM () i // 声明变量,初始值为0 如果有多条数据,那么这个变量就会 ...