从汇编上跳过去回不来,一去不复返啊!
函数体的定义可以写在调用函数的语句,但是在调用之前要有声明,告诉编译器这个函数是实际存在的。
全局变量和局部变量
全局变量可以在程序的任意地方使用,注意如果定义在其他的源文件中则需要声明
局部变量只可以在复合语句之中使用
函数的副作用;在对全局变量的使用中一定注意在函数中不小心改变了不该改变的全局变量,造成不可挽回的后果。
枚举类型
查找字符串的子串
静态数据的初始化
ex:
同名局部变量的作用域问题
全局作用域
在不同的源文件注意即使声明
:代表使用全局作用域
链接错误的可能原因
文件作用域
两种情况变成文件作用域
static的两重作用,生命周期和作用域
结构作用域:在其结构中作用
可以重名
名空间作用域,使用名空间可以防止重名
内联函数
可以加快程序运行
缺省参数的函数
函数名可以重载
匹配不存在的解决
递归分苹果问题
尾递归:尾递归的妙处在于递归后可以删去前一个函数的栈帧,从而降低程序的深度,因而可以节约空间。
指针用途:
1 传递地址提高传输效率
2 访问动态变量
3 高效访问数组元素
指向常量的指针
可以避免不小心修改了对应量的值
指针常量
malloc和calloc的区别:初始化
删去动态数组的方法
动态变量开辟在堆区,可以跨函数生存
删除时,必须指向第一个元素,即管理动态数组的元素
动态变量的开辟一定小心内存泄漏,动态开辟空间一定要保证及时释放掉
且释放掉动态开辟内存后指针就变成了悬浮指针,一般情况需要置空,防止访问到不属于自己管理的空间。
例如
用不断移动的指针可以提高运行的效率
二维数组的数组名是一个指向数组的指针,一定要注意
首元素,第一行元素的首,整个数组的首有不同的含义
交换两个指针的值可以使用二级指针
多级指针实现创建动态二维数组
此处的q指向一个一维数组,创建的动态数组即是一个充满指向一维数组的指针构成的数组
法二