摘要: 1 函数设计原则1 函数从意义上应该是一个独立的功能模块 函数名要在一定程度上反映函数的功能 函数参数名要能够体现参数的意义 void sc(char* s1,char* s2); //× vs void str_copy(char* str_dest,char* str_src); //√ 尽量避 阅读全文
posted @ 2020-10-06 18:04 nxgy 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 1 递归的数学思想 递归是一种数字上分而自治的思想 递归需要有边界条件 当边界条件不满足时,递归继续进行 当边界条件满足时,递归停止 递归将大型复杂问题转化为与原问题相同但规模较小的问题进行处理 2 递归函数 函数体内部可以调用自己 递归函数 函数体存在自我调用的函数 递归函数是递归的数学思想在程序 阅读全文
posted @ 2020-10-06 18:03 nxgy 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 1 函数与宏 宏 or 函数? #define RESET(p,len) \ while(len > 0) \ ((char*)p)[--len] == 0 void reset(void* p,int len) { while(len > 0) { ((char*)p)[--len] = 0; } 阅读全文
posted @ 2020-10-06 18:02 nxgy 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 1 函数参数 函数参数在本质上与局部变量相同,在栈上分配空间 函数参数的初始值是函数调用时的实参值 函数参数的求值顺序依赖于编译器的实现 ⇒ 函数的实参没有固定的计算次序,但必须计算完毕后才进入函数体(顺序点) 示例:函数参数的求值顺序 Demo #include <stdio.h> int fun 阅读全文
posted @ 2020-10-06 18:01 nxgy 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 1 C 语言中的函数 函数的由来 程序 = 数据 + 算法 C 程序 = 数据 + 函数 2 函数的意义 模块化程序设计 C 语言中的模块化 3 面向过程的程序设计 面向过程是一种以过程为中心的编程思想 首先将复杂的问题分解为一个个容易解决的问题 分解过后的问题可以按照步骤一步步完成 函数是面向过程 阅读全文
posted @ 2020-10-06 18:00 nxgy 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 1 野指针 1.1 野指针危害 指针变量中的值是非法的内存地址,进而形成野指针 野指针不是 NULL 指针,是指向不可用内存地址的指针 NULL 指针并无危害,很好判断,也很好调试 C 语言中无法判断一个指针所保存的地址是否合法 1.2 野指针的由来 局部指针变量没有被初始化 指针所指向的变量在指针 阅读全文
posted @ 2020-10-06 17:59 nxgy 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 1 程序文件的一般布局 不同代码在可执行程序(没有栈、堆)中的对应关系 2 程序与进程 程序和进程不同 程序是静态的概念,表现形式为一个可执行文件 进程是动态的概念,程序由操作系统加载运行后得到进程 每个程序可以对应多个进程 每个进程只能对应一个程序 问题:包含脚本代码的文本文件是一种类型的可执行程 阅读全文
posted @ 2020-10-06 17:58 nxgy 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 1 程序中的栈 栈在程序中用于维护函数调用上下文 函数中的参数和局部变量存储在栈上 栈示意图 esp:ESP(Extended Stack Pointer)为扩展栈指针寄存器,是指针寄存器的一种,用于存放函数栈顶指针。与之对应的是EBP(Extended Base Pointer),扩展基址指针寄存 阅读全文
posted @ 2020-10-06 17:08 nxgy 阅读(335) 评论(0) 推荐(0) 编辑
摘要: 1 动态内存分配的意义 C语言中的一切操作都是基于内存的 变量和数组都是内存的别名 内存分配由编译器在编译期间决定 定义数组的时候必须指定数组长度 数组长度是在编译期就必须确定的 需求:程序运行的过程中,可能需要使用一些额外的内存空间 2 malloc 和 free malloc 和 free 用于 阅读全文
posted @ 2020-10-06 16:17 nxgy 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 1 问题 下面的标识符代表什么含义? int (*p1)(int*,int (*f)(int*)); int (*p2[5])(int*); int (*(*p3)[5])(int*); int* (*(*p4)(int*))(int*); int (*(*p5)(int*))[5]; 2 指针阅读 阅读全文
posted @ 2020-10-06 16:16 nxgy 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 1 函数类型 C 语言中的函数有自己特定的类型 函数的类型由返回值,参数类型和参数个数共同决定 如:int add(int i,int j) 的类型为 int(int,int) C 语言中通过 typedef 为函数类型重命名 :typedef type name(parameter list) 如 阅读全文
posted @ 2020-10-06 16:15 nxgy 阅读(85) 评论(0) 推荐(0) 编辑
摘要: 1 问题 为什么 C 语言中的数组参数为什么退化为指针? 退化的意义 C 语言中只会以值拷贝的方式传递参数 当向函数传递数组时: 将整个数组拷贝一份传入函数:× 将数组名看作常量指针传数组首元素地址:√ C 语言以高效作为最初设计目标: 低效:参数传递的时候如果拷贝整个数组,执行效率将大大下降 不安 阅读全文
posted @ 2020-10-06 16:13 nxgy 阅读(106) 评论(0) 推荐(0) 编辑