04_0100 4.1 函数的基本知识
4.1 函数的基本知识
返回值类型 函数名(参数声明表)
{
声明和语句
}
如果有返回值,那么一个函数的所有路径都需要有返回值
Linux下多个文件的编译
代码:http://q1024.com/p/item.php?u=krc
视频:https://www.bilibili.com/video/BV12L4y1Y76R?p=28
04_0200 4.2 返回非整形值的函数
4.2 返回非整形值的函数
如果先前没有声明过的一个名字出现在某个表达式中,并且其后紧跟一个左圆括号,那么上下文就会认为这是一个函数名字,并假定返回int
但上下文并不对其参数作任何假设.
代码:http://q1024.com/p/item.php?u=krc
视频:https://www.bilibili.com/video/BV12L4y1Y76R?p=29
04_0300 4.3 外部变量
4.3 外部变量
如果变量定义在任何函数的外部,则是外部变量
函数的本质---堆栈视角
从堆栈的视角来讲解函数调用本质
****编译出来的exe还会有链接函数名吗?
函数的int返回值的本质是什么
什么是堆栈变量
----根据esp,ebp和变量的位置, 来说明变量就是放在堆栈里面的
为什么会堆栈溢出
----递归让堆栈溢出
----定义变量让堆栈溢出
变参函数的秘密
printf是怎么确定变量的个数的
printf("%d")会发生什么?
事实上,没有真正的变参,所谓变参实际上是某一个参数指明了参数的个数
visual studio的默认堆栈大小是多少?
除了堆栈变量,函数调用等也会使用堆栈.
代码: http://q1024.com/p/item.php?u=krc
视频:
https://www.bilibili.com/video/BV12L4y1Y76R?p=30
https://www.bilibili.com/video/BV12L4y1Y76R?p=31
https://www.bilibili.com/video/BV12L4y1Y76R?p=32
https://www.bilibili.com/video/BV12L4y1Y76R?p=33
04_0400 4.4 作用域规则 4.5 头文件 4.6 静态变量 4.7 寄存器变量 4.8 程序块结构 4.9 初始化
所有的变量类型
1.外部变量: 也就是全局变量
2.静态变量: 用static修饰的变量
3.自动变量:也就是堆栈变量
4.寄存器变量(只适用于自动变量及函数的形式参数)
5.函数形式参数
所有的函数类型
1.外部函数:函数内不能定义函数,所有函数都是外部函数
2.静态函数:用static修饰的函数
变量/函数的定义与声明
1.真正干活的叫定义(分配内存空间)
如果是数组,定义一定要确定数组长度
2.辅助编译器编译的叫声明
声明不可以对变量进行初始化
如果是数组, 声明不一定要指定数组长度,也可以乱指定数组长度
外部变量(全局变量)
外部函数(因为函数不能定义在函数内部,所以函数都是外部的)
静态变量
外部静态变量
函数内部静态变量
作用域
作用域: 所有文件 单个文件 大括号内
1.外部变量(全局变量) 文件内的静态变量 大括号内的静态变量
函数参数
堆栈变量
外部函数 声明用static修饰的函数
初始化时机
初始化: 程序开始执行前初始化 看见时初始化
1.外部变量(全局变量)
2.静态变量 自动变量
寄存器变量
数组的初始化
1.省略长度,编译器会把花括号中初始化表达式的个数作为数组的长度
2.如果初始化表达式中的个数比数组元素少,没有初始化的将会被初始化为0,不能跳过前面的数组元素而直接初始化后面的元素
字符数组初始化比较特殊:
char pattern[] = "ould " 与 char pattern[] = { 'o', 'u', 'l', 'd','