c语言学习之基础知识点介绍(十九):内存操作函数
一、malloc函数
/*
首先需要导入头文件 #include <stdlib.h>
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<; i++) {
printf("%d\n",p[i]);
}
int *p = calloc(, );//在堆区
*(p) = ;
*(p+) = ;
*(p+) = ;
for (int i =; i<; i++) {
printf("%d\n",p[i]);
}
malloc和calloc的区别:
malloc不会初始化,会有垃圾值,calloc会初始化为0
char *pch = malloc();
for (int i =; i<; i++) {
printf("%d ",*(pch+i));
}
printf("\n------------分割线-------------\n");
char *pch2 = calloc(, );
for (int i =; 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语言学习之基础知识点介绍(十九):内存操作函数的更多相关文章
- 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 结构体名{ 成员列表; }; 切记切记有分号! 说明:成员列表就是指你要保存哪些类型的数据. 注意:上面的语法只是定义一个新的类型,而这个类型叫做结构体类 ...
随机推荐
- Android中TextView输入字数统计和限制
在Android开发应用的时候,文本编辑框中最多输入140个字,经常会显示还剩多少字以限制用户输入的字数, EditText content;//定义一个文本输入框 TextView hasnum;/ ...
- CodeForces 287B Pipeline
思路:二分答案,时间复杂度O(nlgn). 若个数为x,那么算出这种情况下提供的水管的最大值和最小值与n比较即可,注意x个分离器需要减去x-1个水管. #include<cstdio> # ...
- Python ImportError: No module named *****
如果想使用非当前模块中的代码,需要使用Import,这个大家都知道. 如果你要使用的模块(py文件)和当前模块在同一目录,只要import相应的文件名就好,比如在a.py中使用b.py: import ...
- Spark常见错误汇总
1. Spark Driver cannot bind on port0, SparkContext initialized failed 如果是通过spark-submit等命令行提交的任务,在sp ...
- POJ 1321 棋盘问题 DFS搜索
简单搜索 练习一下回溯 #include <iostream> #include <cstdio> #include <cstring> #include < ...
- 【原创】Java移位运算
学习移位运算,首先得知道参与移位运算的类型的位数,那先来复习下Java基础类型的占位数吧. Java基础类型 Java基础类型总结一览表 类型 二进制位数 最大值 最小值 初始化值 表示形式 带符号 ...
- sqlMetal用法和例子 自定义DBML
SqlMetal是跟随VS发布的一个自动工具,可以用来生成数据库的Linq代码. 这是中文版的帮助文件. SqlMetal [选项] [<输入文件>] 为 .NET Framework 的 ...
- POJ 3295 Tautology (构造题)
字母:K, A, N, C, E 表示逻辑运算 字母:p, q, r, s, t 表示逻辑变量 0 或 1 给一个字符串代表逻辑表达式,如果是永真式输出tautology 否则输出not 枚举每个逻辑 ...
- Learning JavaScript Design Patterns The Observer Pattern
The Observer Pattern The Observer is a design pattern where an object (known as a subject) maintains ...
- flot图插件使用
<div id="budget-charts"></div> <script src="../../../plugins/ace/js/fl ...