本文共 3130 字,大约阅读时间需要 10 分钟。
编写函数
调用函数
#includeusing std::cin; using std::cout; using std::endl;int fact(int val){ int ret = 1; while (val > 1) ret *= val--; return ret;}int main(){ int j = fact(5); cout << "5! is" << j << endl; return 0;}
函数的调用顺序:实参5传递给形参val,执行fact函数直到return ret,再用ret初始化j,回到主函数顺序运行
形参和实参
实参是形参的初始值函数形参列表
形参列表可为空:
多个形参,必须声明每个形参类型:
任意两个形参不能同名
函数返回类型不能是数组
自动对象
只存在于块执行期间的对象,如形参。
局部静态对象
函数只能定义一次但可多次声明
函数声明:无需函数体,只需声明后加上分号 函数定义:包含函数体函数三要素:返回类型,函数名,形参类型
在头文件中进行函数声明
初始化一个非引用变量时,初始值拷贝给变量,不会影响初始值
传值参数的机理与初始化非引用变量一样
指针形参
使用引用避免拷贝
使用引用形参返回额外信息
#includeusing std::cin; using std::cout; using std::endl; using std::string;string::size_type find_char(const string& s, char c, string::size_type& occurs){ auto ret = s.size(); occurs = 0; for(decltype(ret)i=0;i!=s.size();i++) { if (s[i] == c) { if (ret == s.size()) ret = i; occurs++; } } return ret;}int main(){ string::size_type ctr; string s("Hello"); auto index = find_char(s, 'o', ctr); cout << s << endl; cout<< ctr << endl; return 0;}
指针或引用实参与const
尽量使用常量引用
由于&s对应字面值Hello World则会报错
使用标记指定数组长度
#includeusing std::cout; using std::cin; using std::endl; using std::string;void print(const char* cp){ if (cp) while (*cp) cout<<* cp++;}int main(){ char j[5] = { 'a','b','c','d' }; print(j); return 0;
运用char型数组以0结尾,结合判断语句,输出整个数组,仅对char型数组有用
使用标准库范围
#include#include using std::cout; using std::cin; using std::endl; using std::string;void print(const int* beg, const int* end){ while (beg != end) cout << *beg++<
运用迭代器,将两个指针分别指向数组的首尾,依次输出元素
显示传递一个表示数组大小的形参
#include#include using std::cout; using std::cin; using std::endl; using std::string; using std::end; using std::begin;void print(const int ia[], size_t size){ for (size_t i = 0; i < size; i++) cout << ia[i] << endl;}int main(){ int j[] = { 1,2 }; print(j, end(j) - begin(j)); return 0;}
运用形参表示数组大小,依次输出数组成员
数组形参和const
数组引用形参
传递多维数组
#includeusing std::cin; using std::cout; using std::endl;int main(int argc,char* argv[]){ cout << "argc=" << argc << endl; for (int i = 0; i < argc; i++) cout << "argv["<< i << "]=" << argv[i]<
initializer_list函数
如果函数的实参数量未知,但类型相同,则可用initializer_list形参转载地址:http://zbmki.baihongyu.com/