形参:函数定义的时的参数—也就是无赋值的变量(作用是说明参数的类型)
实参:调用函数时使用的参数—也就是有赋值的变量(函数实际操作的对象)
实参是形参的数值值,尽管实参与形参存在对于关系,但是并没有规定实参的求值顺序,编译器能以任何可行的顺序对实参求值
局部对象名字有作用域,对象有生命周期
- 名字的作用域是程序文本的一部分,名字在其中可见
- 对象的生命周期是程序执行过程中该对象存在一段时间
局部静态对象形参和函数体内部定义的变量
函数声明(也被称为函数原型)在程序执行路径第一次经过对象定义语句时初始化,并且直到程序终止才被销毁。
分离式编程函数只能被定义一次但是可以被声明多次,但是当一个函数永远不会被用到时,只有声明没有定义
允许我们将文件分割到几个文件当中去,每个文件独立编译
如果我们修改了其中一个源文件,那么只需要重新编译那个改动的文件。
参数传递- 引用传递:当形参是引用类型时,我们说它对应的实参被引用传递
- 值传递:当实参的值被拷贝给形参时,形参和实参是两个相互独立的对象,我们说这样的实参被值传递。
- 指针形参:使用的是值传递,拷贝是指针的值,实参和形参是不同的指针。因为使我们可以间接地访问它所指向地对象,所以通过指针可以修改它所指向地值。
- 使用引用参数避免拷贝(拷贝大地类类型对象或者对象比较低效)
- 使用引用参数返回多个值(返回多个参数)
如果函数无需改变引用形参的值,最好将其声明为常量引用。
尽可能使用常量引用。
当实参初始化形参的时,会忽略掉顶层const。(传入的实参可以是const 也可以不是),
如果除了形参是否是const类型其他都一样,会导致函数重复定义错误。
数组形参void f(const int a)
void f(int a) // 重复定义了f(int)
- 不能拷贝数组
- 使用数组的时候,会将其转换成指针
void f(const int*)
void f(cosnt int[])
void f(const int[5])
是否会重复定义
上面三个函数是等价的。每个函数的唯一形参都是const int *类型的。
- 数组本身包含一个结束标记(使用这种方法典型是c风格的字符串)。
- 传递指向数组首元素和尾后元素的指针。
- 专门定义一个表示数组大小的形参。
数组引用实参
f(int (&arr)[10])
多维数组
void f(int (*marix)[10])等价于 void f(int marix[][10])
int main(int argc,char *argv[]){}
argc:参数的个数
argv:是一个字符指针数组。
initializer_list: 如果函数的实参数量未知但是全部实参的类型都相同
省略符形参为了方便C++访问某些特殊的C代码而设置的,这些代码使用名为varargs的C标准库功能。
- 只能出现在形参列表的最后一个位置。



