黑马程序员——c语言学习心得——函数传递二维数组
黑马程序员——c语言学习心得——函数传递二维数组
-------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、定义指针的时候一定要初始化。
变量定义的时候给变量初始化,这是保证不出错的一个很好的习惯。尤其是在指针的使用上,如果我们没有给指针初始化,就会出现野指针,该指针的指向并不是我们所希望的,一旦错误的释放了这个指针,就会发生内存的访问。那么如何初始化指针变量呢,一般有以下几种方法:
1、初始化空指针
int* pInteger=NULL;
2、用已有的变量初始化
int length=5;
int* pInteger=&length;
3、用内存分配函数给指针分配空间
int* pInteger=(int*)malloc(10*sizeof(int));//为指针分配大小为10个整数的内存空间。
二、正确的申请和释放内存
指针使用之后,如果不释放指针所使用的内存,就会造成内存的泄露,这样就会有大量内存由于没能释放,别的程序不可以使用这部分内存,如果一个程序不停申请内存而不去释放内存,很快就会造成系统的崩溃。那么如何正确的申请和释放内存呢。
1、指针初始化,上面已讲
2、正确的申请内存
如何申请内存才算是正确的申请内存呢?首先要判断指针是否为空,如果不为空,则释放该指针所指向的内存块,如果不释放这块内存,而直接就申请内存,就会造成内存的泄露。申请内存后,一定要判断是否申请成功。
如:int* pInteger=NULL;//指针定义处
...
if(pInteger != NULL)
{
free(pInteger);
pInteger=NULL;//指针释放之后并不为空,要设置其为空
}
pInteger=(int*)malloc(10*sizeof(int));
if(pInteger != NULL)
{
printf("内存申请没有成功\n!");
exit(0);
}
...
3、内存释放
程序使用完了指针,一定要记得释放指针指向的内存。释放后一定要记得设置指针为空指针。因为free函数在释放指针后,只是单纯的释放了该指针指向的内存空间,而没有将指针赋为空值。所以一定要记得在释放指针后将指针赋为空值。
如:
int* pInteger=NULL;//指针定义处
...
free(pInteger);//释放指针
pInteger=NULL; //指针赋为空值
三、使用指针时一定要判断指针是否为空
在使用指针时一定要判断指针是否为空,如果为空,则做相应的操作。如果不做判断,则可能错误的使用空指针。
如:char* dest=NULL;
...
strcpy(dest,"string");//如果dest为空则出错
正确的使用方法为:
if(dest == NULL)
{
dest=(char*)malloc(7*sizeof(char));//因为字符串以“\0”结束,
//所以要申请7个字符的内存
//判断内存申请是否成功
...
}
strcpy(dest,"string");
-------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
转载于:https://www.cnblogs.com/zijie/p/4925949.html
黑马程序员——c语言学习心得——函数传递二维数组相关推荐
- c语言字符二维数组传参,C语言函数传递二维数组
C语言如果给函数传递二维数组作为参数 问题的产生 先看一个传递二维数组的例子: #include void foo(int a[][], int m, int n) { int i = 1; int ...
- C/C++函数传递二维数组
目录 函数参数传递二维数组的问题 解决方案 1.传递第二维和更高维的大小 2.根据数组的存储原理把二位数组当作一维数组来操作(降维处理) 函数参数传递二维数组的问题 将二维数组当作参数的时候,必须指明 ...
- 黑马程序员——C语言学习——概述
-----------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ----------- OS系统简介 l苹果公司专门为苹果电脑设计的操作系统 l以坚如磐石的UNIX为 ...
- 黑马程序员——C语言学习——预处理指令、extern与static、typedef、递归
--------Java培训.Android培训.iOS培训..Net培训.期待与您交流! -------- 一. 预处理指令 顾名思义,预处理,就是预先处理的指令,在代码编译之前执行.预处理指令的位 ...
- 【b站黑马程序员C++视频学习笔记-多态案例二-制作饮品】
多态案例二-制作饮品 利用多态实现制作咖啡和茶水 Coffee和Tea继承了抽象类AbstractDrinking,并重写了AbstractDrinking的抽象函数 #include<iost ...
- 黑马程序员C语言基础(第五天)运算符与表达式、程序流程结构、数组和字符串、函数
https://www.bilibili.com/video/BV15W411K7k6?p=93&spm_id_from=pageDriver 黑马程序员C语言基础(第五天)运算符与表达式.程 ...
- 黑马程序员C语言基础(第三天)
黑马程序员C语言基础(一)第三天 https://www.bilibili.com/video/BV15W411K7k6?p=40 文章目录 低级语言与高级语言 c语言优缺点 c语言应用领域 通过gc ...
- 黑马程序员C语言基础(第八天)复合类型(自定义类型)(结构体)、共用体(联合体)、枚举enum、 typedef
黑马程序员C语言基础(第一天) 黑马程序员C语言基础(第二天) 黑马程序员C语言基础(第三天) 黑马程序员C语言基础(第四天)数据类型 黑马程序员C语言基础(第五天)运算符与表达式.程序流程结构.数组 ...
- 黑马程序员C语言基础(第七天)内存管理
黑马程序员C语言基础(第一天) 黑马程序员C语言基础(第二天) 黑马程序员C语言基础(第三天) 黑马程序员C语言基础(第四天)数据类型 黑马程序员C语言基础(第五天)运算符与表达式.程序流程结构.数组 ...
最新文章
- 一文看懂 NLP 中的情感分析任务
- UICollectionView的使用
- 克里斯蒂安贝尔_克里斯蒂安贝尔和乌云背后的幸福线导演合作神秘“大片”
- 测试SAP BRF+ ruleset
- 16进制数组转字符串
- 算法竞赛入门经典 第二章总结
- 你应该知道的 Linux 命令行技巧
- 信息学奥赛一本通(1092:求出e的值)
- MySQL 基本应用 count() 与 group by
- Dataset XML 序列化,什么是序列化
- BZOJ2217 [Poi2011]Lollipop 【贪心】
- 利用PROMPT_COMMAND记录每个用户执行命令的时间ip等信息。
- Layui 的内置jquery 版本
- 百度坐标拾取html,百度地图API获取地址拾取坐标代码
- 电信增值短信平台模块清单(sp用)
- java计算器课程_Java课程设计——计算器团队博客
- 15 个 Python 开源项目,使用 PyQt 做小型桌面应用!
- 计算机系双选会方案,黄山学院2018届毕业生就业双选会工作方案
- 定风波/三月七日——苏轼
- 数字经济时代,数据中心供电系统如何助力实现双碳目标