函数01
实参:实际往里面传的参数
-
空形参列表
()/(viod)
-
逗号隔开,必须写出类型
形参:写函数时用到的
自动对象 :形参
局部静态对象 :第一次经过对象定义语句时初始化,直到程序终止才被销毁,后续调用不会初始化,可以用来看函数的调用次数或者执行和调用相关的操作。
static size_t i =0
ret *= val --;
//运算之前的值乘进去,然后再自减
声明
-
建议变量、函数在头文件中声明,在源文件中定义。
-
含有函数声明的头文件应该被包含到源文件中
-
#ifndef #define #endif
分离式编译
-
CC 是c 编译器的名字,如gcc; CXX是c++编译器的名字,如g++
-
export CC=gcc CXX=g++
$CXX test.cpp -o a.out
// -
.cc是扩展名,表示c++源文件
-
CC a.cc b.cc直接编译生成可执行文件a.out;
-
CC a.cc b.cc -o main 直接编译生成可执行文件main;
-
CC -c a.cc b.cc编译生成对象代码a.o b.o; (-c不生成可执行文件) .o 中间代码,可以简化编译过程
-
CC a.o b.o编译生成可执行文件a.out
-
CC a.o b.o -o main 编译生成可执行文件main。
makefile
依赖
生成
参数传递
-
引用传递 形参:* * 值参 &
-
值传递 初始值直接拷贝
-
传递引用形参可以避免不必要的复制 形参:& 值参正常
-
引用比指针会更好用
-
如果实参是右值,不能为引用类型
-
const & 可以用常量,这样就只读不写
const形参和实参
- void func(const int i) 可以传const也可以传变量; 但是不能又定义const int i ,又再写一个相同的函数定义Int i
- int &r=42 是不行的,不能用一个字面值初始化一非常量引用
- 普通引用不能绑定到字面值
- 普通引用不能绑定到const对象
数组形参
- 传递数组,传递的是指向数组首元素的指针
- 标记:
- begin end函数
- \0可以帮助字符数组
- 传递数组大小
- int (&arr)[2] 是数组的引用 int & arr[2]是两个引用类型int数组
- int (*arr)[2] 是指向含有两个元素的数组的指针 *arr[2] 是两个指针的数组
- int *&p 引用的对象是指针
main处理命令行选项
int main(int argc, char *argv[]){...}
argv[0]保存程序的名字 而非用户输入
含有可变形参的函数
在范围for循环中使用initializer_list对象时,应该使用常量引用类型。
initializer_list对象中的元素都是常量.
返回
- 不要返回局部对象的引用或指针
- 如果希望返回对象被修改,返回常量的引用无效
感觉自己还是没有搞懂指针之类的东西,(lll¬ω¬),继续加油~