黑马程序员——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语言学习心得——函数传递二维数组相关推荐

  1. c语言字符二维数组传参,C语言函数传递二维数组

    C语言如果给函数传递二维数组作为参数 问题的产生 先看一个传递二维数组的例子: #include void foo(int a[][], int m, int n) { int i = 1; int ...

  2. C/C++函数传递二维数组

    目录 函数参数传递二维数组的问题 解决方案 1.传递第二维和更高维的大小 2.根据数组的存储原理把二位数组当作一维数组来操作(降维处理) 函数参数传递二维数组的问题 将二维数组当作参数的时候,必须指明 ...

  3. 黑马程序员——C语言学习——概述

    -----------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ----------- OS系统简介 l苹果公司专门为苹果电脑设计的操作系统 l以坚如磐石的UNIX为 ...

  4. 黑马程序员——C语言学习——预处理指令、extern与static、typedef、递归

    --------Java培训.Android培训.iOS培训..Net培训.期待与您交流! -------- 一. 预处理指令 顾名思义,预处理,就是预先处理的指令,在代码编译之前执行.预处理指令的位 ...

  5. 【b站黑马程序员C++视频学习笔记-多态案例二-制作饮品】

    多态案例二-制作饮品 利用多态实现制作咖啡和茶水 Coffee和Tea继承了抽象类AbstractDrinking,并重写了AbstractDrinking的抽象函数 #include<iost ...

  6. 黑马程序员C语言基础(第五天)运算符与表达式、程序流程结构、数组和字符串、函数

    https://www.bilibili.com/video/BV15W411K7k6?p=93&spm_id_from=pageDriver 黑马程序员C语言基础(第五天)运算符与表达式.程 ...

  7. 黑马程序员C语言基础(第三天)

    黑马程序员C语言基础(一)第三天 https://www.bilibili.com/video/BV15W411K7k6?p=40 文章目录 低级语言与高级语言 c语言优缺点 c语言应用领域 通过gc ...

  8. 黑马程序员C语言基础(第八天)复合类型(自定义类型)(结构体)、共用体(联合体)、枚举enum、 typedef

    黑马程序员C语言基础(第一天) 黑马程序员C语言基础(第二天) 黑马程序员C语言基础(第三天) 黑马程序员C语言基础(第四天)数据类型 黑马程序员C语言基础(第五天)运算符与表达式.程序流程结构.数组 ...

  9. 黑马程序员C语言基础(第七天)内存管理

    黑马程序员C语言基础(第一天) 黑马程序员C语言基础(第二天) 黑马程序员C语言基础(第三天) 黑马程序员C语言基础(第四天)数据类型 黑马程序员C语言基础(第五天)运算符与表达式.程序流程结构.数组 ...

最新文章

  1. 一文看懂 NLP 中的情感分析任务
  2. UICollectionView的使用
  3. 克里斯蒂安贝尔_克里斯蒂安贝尔和乌云背后的幸福线导演合作神秘“大片”
  4. 测试SAP BRF+ ruleset
  5. 16进制数组转字符串
  6. 算法竞赛入门经典 第二章总结
  7. 你应该知道的 Linux 命令行技巧
  8. 信息学奥赛一本通(1092:求出e的值)
  9. MySQL 基本应用 count() 与 group by
  10. Dataset XML 序列化,什么是序列化
  11. BZOJ2217 [Poi2011]Lollipop 【贪心】
  12. 利用PROMPT_COMMAND记录每个用户执行命令的时间ip等信息。
  13. Layui 的内置jquery 版本
  14. 百度坐标拾取html,百度地图API获取地址拾取坐标代码
  15. 电信增值短信平台模块清单(sp用)
  16. java计算器课程_Java课程设计——计算器团队博客
  17. 15 个 Python 开源项目,使用 PyQt 做小型桌面应用!
  18. 计算机系双选会方案,黄山学院2018届毕业生就业双选会工作方案
  19. 定风波/三月七日——苏轼
  20. 数字经济时代,数据中心供电系统如何助力实现双碳目标

热门文章

  1. 团队项目的分工及绩效评估方法
  2. 计算机科学与技术导论
  3. ZOJ Monthly, January 2013
  4. 小程序框架之wepy报错问题
  5. POJ 3694 (tarjan缩点+LCA+并查集)
  6. .Net Core Cors中间件解析
  7. python常用库之base64
  8. 复杂的xml转化为java实体
  9. 【LeetCode】309. Best Time to Buy and Sell Stock with Cooldown
  10. CentOs6.5下独立安装Nginx篇