前言
这本书作为学完C语言后进行基础的巩固,此篇博客内容较少可以一口气看完,当然此博客只是博主自我跳读得到的易错点等知识,博主能力实在有限还望大佬不吝赐教.
如何读这本书
⚠警示读者一些常见的缺陷
交叉引用(>)用来定义信息指向后面或前面章节的内容
附加说明 包含一些严格来说不算c语言但是熟练的c程序员都应该知道
Q&A 表示问与答的具体内容
栈与堆
首先栈
栈是通过压栈和弹出来,进行局部变量的保存和删除,所以栈部的连续定义的局部变量内存之间不会有其他的变量。
栈区的保存形式是由高到低进行保存与堆区相反
栈区存储的变量随着函数结束而结束
堆区
堆区的内存需要我们进行申请才可以进行使用。在内存分配方面上更像链表的形式。
链表的释放也是手动进行释放
内容由低到高需要注意的是后建立的变量不一定比先建立的内存搞因为如果前面有内容被释放掉会使用被释放掉的内存
本知识点参考与 https://blog.csdn.net/K346K346/article/details/80849966?utm_source=app&app_version=5.0.1&code=app_1562916241&uLinkId=usr1mkqgl919blen 这篇博客的栈和堆讲解更加细腻感兴趣可以看一看
碎知识点
左值
变量是已知的唯一的左值
复合赋值
如v+=e和v=e+v不等价只能说他们等同
再如i*=j+k 和i=i*j+k不等价也不等同这个运算要看优先级
自增自减运算符----42页
i++意味着现在先用i的原始值,稍后再自增i,这个稍后c语言标准没有给出准确时间但是可以放心假设i将在下一条语句执行前进行自增。–有种相似的特性
未定义行为----44
根据c标准类似于c=(b=a+2)-(a=2)或j=i*i++这种在表达式既有对数值的应用又有对数值的改变就叫未定义行为这样的表达式是不稳定或可能产生无意义的结果
数组指定初始化式
当数组中相对较少的元素需要进行显性初始化时如:int a[10]={0,0,29,0....};对于小数组我们可以使用这种方法但是当我们使用大数组时我们可以在c99标准中的int a[15] = {[2]=29,[9]=7,[14]=48};这样我们就讲特定下标位置的元素进行了显式初始化。再次强调这种显式初始化是需要编译器支持C99标准的。
静态局部变量
在局部变量声明中放置static截图使局部变量拥有静态存储期限而不会自动被销毁所以在整个程序运行期间都会保留变量的值但是变量依旧是他原先的作用域所以static的作用只是保持变量在整个程序的运行中数值的保存
形式参数
形式参数和局部变量有着一样的性质,形式参数和局部变量唯一的区别就是函数调用是会对形式参数进行自动的初始化
全局变量(外部变量)
可以使用static修饰使得该全局变量只能在定义文件内使用
程序终止
- return 语句
有两种格式1. return; 2.return+表达式;
如果return中的表达式类型和函数返回类型不匹配,系统见回啊表达式类型隐式转换成返回类型
在void返回类型的函数中可以使用return;来结束函数进程
在main函数中return的返回数是一种状态码正常的函数终止应该返回0为了表示异常的终止则返回非0即可
exit函数
另一种终止程序的代码就是使用exit函数了
exit函数的传递参数也是有意义的正常的程序终止是exit(0)或exit(EXIT_SUCCESS)异常终止程序依旧是传递非零或exit(EXIT_FAILURE)(PS:这两个宏定义都是和exit在同一个头文件内EXIT_SUCCESS为0 EXIT_FAILURE为1)
return 和exit的区别在于无论在哪个函数调用exit函数都会引起程序的终结,return只会引起函数的终止。
结尾
此博客现在还未完结,只是一个开始后续会持续更新