2.5(完结)C语言重点解剖内存管理函数要点速记

news/2024/10/18 12:23:04/

1.指针如果有具体的指向,包括野指针,对应的合法性,我们是无法验证的。

2.所有的指针如果没有被直接使用,必须设置为NULL。

3.在函数内部,要验证指针的合法性,本质上是验证指针!=NULL。

4.自定义函数传入指针时不建议使用assert来检测,原因1:无法传入一个NULL指针。

原因2:只在debug下起作用。

5.指针越界不一定会报错。

6.程序退出之后内存泄漏问题就不存在了。

但是永远不会退出的程序,最害怕内存泄漏(操作系统,杀毒软件,服务器程序)。

7.用malloc申请空间,实际分配的空间比用户申请的空间大。同一种编译器,在同一种C语言标准下,多出来的空间是固定的。所以,如果要申请大的空间,建议使用动态内存开辟,如果申请小空间,建议在栈上开辟数组。

8.变量定义和语句中带空格。

9.逻辑密切的语句中不要带空格,不密切的带上空格。

10.复杂的函数,判断和分支结束的时候加上注释。

11.代码缩进一般4个空格。注释也要注意缩进。

12.用反义词组命名具有互斥意义的变量或者函数。

13.即便优先级确立了,但是仍然建议带上括号。特别是宏定义,一定要带上符号。

14.函数声明的时候,尽量把函数名带上。

15.函数参数命名要恰当,顺序要合理。

16.尽量不要省略函数的返回值。如果不需要返回值就空类类型(void)。

17.函数入口处对参数进行有效性检查,用if,或者assert(不推荐)。

18.函数的功能要单一,不要设计多用途的函数。

19.尽量避免函数有记忆功能(函数内尽量不要有static修饰的变量)。

20.尽量避免函数传入的参数过多。

21.尽量不要使用类型和数目不确定的参数。

22.函数传参的顺序是从右向左的。

23.f908f12a562040ac922c1c2f34cd0dfb.png

24.可变参数列表要有一个明确的参数。

2059e675be904a1b9f9c4d0c9faf56d2.png

 

25.在可变参数中,如果是短整型,一般都要进行int类型进行提升。

3407f6b3f479475d9d87f9c4aeadebd0.jpg

 

26.使用可变参数的时候,只能从第1个往后依次使用。

27.可变参数的底层设计和实现。

06290511809b4a9b84d73087eeae425b.jpg

71067aff69dc4783821caf02b4109e9a.jpg 

2ca65d8e03f0465f9706087865d458fb.jpg 

d87c2fda97794f159d403685d4269818.jpg 

28.GetTickCount()获取电脑开机到现在累计的时间。

b3a002d206144884abb6b48b210c3ecf.jpg

 

29.迭代(循环)和递归的比较,迭代法之所以用的时间少,是因为没有多余的函数调用,地规有大量的函数调用,而函数调用是需要成本的。

eb302a3ab3284c1e9f33f1ee40d0fb5b.png

 

 

 


http://www.ppmy.cn/news/11192.html

相关文章

从零开始学习Maven

maven Maven是apache公司开发的基于项目对象模型(POM) 可以通过一些描述信息来管理项目的构建、报告和文档的软件管理工具。 Maven 是用来管理项目,进行项目构建的一个软件。 java编写 项目构建流程: 1. 导入jar包 2. 配置文…

详解函数指针(●‘◡‘●)☞

本文紧接于http://t.csdn.cn/78wbF 这篇一.函数指针数组\ ( >O< ) /1.书写形式&#xff1a;由函数指针内部*变量名>*变量名[n]&#xff1b; 2.使用&#xff1a;函数指针数组的用途&#xff1a;转移表 例如&#xff1a;模拟计算器&#xff1a;#include<stdio.h> …

Visual studio C++桌面应用程序添加外部文件引用

C桌面应用程序添加外部文件引用 前言 之前对C的开发接触很少&#xff0c;本章节记录一下Visual studio开发C桌面应用程序是如何引入外部文件 ★提高阅读体验★ &#x1f449; ♠一级标题 &#x1f448; &#x1f449; ♥二级标题 &#x1f448; &#x1f449; ♥ 三级标…

【数据结构】队列详解

前言 前面我们学习了一种数据结构&#xff1a;栈&#xff0c;栈是一种只允许在一端尽进行插入删除的数据结构&#xff0c;而今天我们将学习另一种数据结构&#xff1a;队列&#xff0c;队列是一种支持在一端进行插入&#xff0c;在另一端进行删除的数据结构。 一、队列的介绍…

Esp8266学习2. Node-mcu基于Arduino IDE2.0.3设置及基本操作

Esp8266学习2. Node-mcu基于Arduino IDE2.0.3设置及基本操作一、准备工作1. 下载Aruino IDE2. 准备Node-MCU开发板二、设置1. 填写开发板网址2. 开发板设置3. 连接开发板三、测试点亮LED程序1. 加载示例程序2. 编译运行四、一些基本网络操作1. 连接到热点2. 使用WiFiClient3. 创…

mysql的binlog学习记录

文章目录什么是binlogbinlog格式StatementRowMixedbinlog使用什么是binlog MySQL Binary Log也就是常说的bin-log, ,是mysql执行改动产生的二进制日志文件。简单的来说&#xff0c;binlog日志用于记录所有更新了数据或者以及潜在更新了数据&#xff08;例如&#xff0c;没有匹…

webviz安装,docker安装可正常使用与Foxglove Studio

Foxglove Studio Foxglove Studio与webviz使用起来非常类似 去可以直接使用web也可以下载安装包 Foxglove Studio不提供源码 安装包下载地

初级开发者福音:手把手教你实现数字滚动效果~

文章目录一、前言二、背景知识三、实现方案Step 1&#xff1a;分析需求Step 2&#xff1a;实现单个数字的滚动效果Step 3&#xff1a;组件接口设计Step 4&#xff1a;完善组件一、前言 前端数字滚动显示的场景很多&#xff0c;比如抽奖的时候&#xff0c;营造一种马上公布中奖…