pch在c语言中占内存字节数,c语言学习之基础知识点介绍(十九):内存操作函数...

一、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 如果有多条数据,那么这个变量就会 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值