一、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语言学习之基础知识点介绍(十九):内存操作函数的更多相关文章

  1. c语言学习之基础知识点介绍(九):预处理指令和多文件开发

    一:预处理指令 /* 预处理指令: 作用:在程序编译之前做一些操作. 预处理命令写法的共同特点:都是以#号开头. 文件包含指令:#include 是一个文件包含命令. 作用:把某个文件内的内容读取出来 ...

  2. c语言学习之基础知识点介绍(八):函数的基本用法

    本节开始说函数. 一.函数的基本用法  /* 作用:可以实现代码的复用,在一定程度上解决代码冗余的问题:方便后期维护. 语法: void 函数名(){ 函数体; } 函数命名要有意义,遵守驼峰命名法. ...

  3. c语言学习之基础知识点介绍(三):scanf函数

    本节继续介绍c语言的基础知识点. scanf函数:用来接收用户输入的数据. 语法:scanf("格式化控制符",地址列表); 取地址要用到取地址符:&(shift+7) 例 ...

  4. c语言学习之基础知识点介绍(二):格式化控制符和变量的补充

    上节简单介绍了c语言中的一些基础知识点,本节将对之前介绍的不够详细的知识点进行补充. 格式化控制符的消息介绍: %d的其他控制符: 1.%md:m代表这个整数位占用多少位,m是一个整数.实际数字不足的 ...

  5. c语言学习之基础知识点介绍(六):if和switch结构

    本节主要说c语言中的分支结构. c语言中分支结构有两大类:一种是if,一种是switch. 一.if结构 //if结构,语法: //第一种: if(表达式){ //语句块 } //第二种: if(表达 ...

  6. c语言学习之基础知识点介绍(十四):指针的进阶

    一.指针的加.减法运算 /* 1.加法运算 1).可以跟整数进行加法运算,得到的还是一个地址 公式: 地址 + 1 = 地址 + 1 * 类型所占的字节数 地址 + n = 地址 + n * 类型所占 ...

  7. c语言学习之基础知识点介绍(十):数组

    本节主要介绍数组. 一.数组 /* 数组:一个变量可以存n个变量. 语法:类型 数组名[长度(正整数)]; 例如:int score[5];//定义了一个int类型的数组,长度为5,可以保存5个数据. ...

  8. c语言学习之基础知识点介绍(二十):预处理指令

    一.预处理指令的介绍 预处理命令:在编译之前触发的一系列操作(命令)就叫预处理命令. 特点:以#开头,不要加分号. #include: 文件包含指令 把指定文件的内容复制到相应的位置 #define: ...

  9. c语言学习之基础知识点介绍(十五):函数的指针

    一.函数的指针的介绍 /* 函数指针: 函数的指针,本质上一个指针 指向函数的指针,就是一个函数指针. 回忆:我们写的源代码编译成二进制的指令集,一串交给CPU执行的指令 先存在内存里面,然后CPU读 ...

  10. c语言学习之基础知识点介绍(十二):结构体的介绍

    一.结构体的介绍 /* 语法: struct 结构体名{ 成员列表; }; 切记切记有分号! 说明:成员列表就是指你要保存哪些类型的数据. 注意:上面的语法只是定义一个新的类型,而这个类型叫做结构体类 ...

随机推荐

  1. LR 取到怎么样才能得到参数列表中的每一个值

    char *m="e"; lr_save_string("helloworld","p4"); lr_eval_string("{ ...

  2. Android webView 中loadData方法加载 带中文时出现乱码

    WebView出现乱码用LoadData方法来解析html的,但是据说这是官方的一个BUG,不能用来解析中文. 采用loadDataWithBaseURL的方法,其中codeingType设置为utf ...

  3. Linux串口调试

    shell方式 1.使用minicon -s配置串口并保存: 2.使用setserial /dev/ttyUSB0 -a等查看串口配置: 3.接收侧cat /dev/ttyUSB0等待串口输出: 4. ...

  4. HDU4417 - Super Mario(主席树)

    题目大意 给定一个数列,每次要求你查询区间[L,R]内不超过K的数的数量 题解 和静态的区间第K大差不多,这题是<=K,先建立好n颗主席树,然后用第R颗主席树区间[1,K]内数的数量减去第L-1 ...

  5. Stream消息流 和 Stream Grouping 消息流组

  6. 教程-Delphi操作快捷键

    ************************************************************** Delphi快捷键-全-高手用-南山古桃(新手)-同学共进 ******* ...

  7. Java条形码生成方案及二维码要点

    1.什么是条形码及其应用 条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的规则排列,用来表示一组信息的图形标识符.常见的条形码是由反射率相差很大的黑条和白条排成的平行线图案. 条形码可 ...

  8. robotframework-FQA

    发现是一波三折,刚开始信步漫游,就又遇上了沟,整理一下吧:  1.WebDriverException: Message: 'geckodriver' executable needs to be i ...

  9. IOS 10适配https 包含对于一些http的一些兼容配置

    iOS10 从2017年1月1日起苹果提出所有新提交的App默认不允许使用NSAllowsArbitraryLoads来绕过ATS的限制,也就是说强制我们用HTTPS,如果不这样的话提交App可能会被 ...

  10. Rediss_基本介绍

    Redis是典型的NoSQL数据库( Not Only SQL) NoSQL数据库: NoSQL,泛指非关系型的数据库.随着互联网web2.0网站的兴起, 传统的关系数据库在应付web2.0网站, 特 ...