C++ 函数
来源:互联网 发布:淘宝节点处罚考试答案 编辑:程序博客网 时间:2024/05/19 00:43
C++函数不能直接返回数组,但可以将数组作为结构体或对象的组成部分来返回。
传递一维数组
// 如果需要修改数组void f_modify(double ar[], int n);// 如果不修改数组void f_no_change(const double ar[], int n);
在函数中,无法使用sizeof运算符来获取一个数组参数的长度,必须依赖程序员传来的长度。
传递二维数组
int sum(int (*arr)[4], int size);int sum(int arr[][4], int size);
传递C风格字符串
因为字符串以’\0’结尾,所以不用传递字符串的长度。
传递对象和结构
- 按值传递(不修改原始内容)
- 传递地址(修改原始内容)
- 按引用传递(修改原始内容)
函数指针
函数的地址是存储其机器语言代码的内存的开始地址。
1、 获取函数地址
函数的地址就是函数名(不加参数列表和括号)
2、 声明函数指针
应制定函数的返回类型和函数的特征标(参数列表)
double pam(int); // 原型
正确的声明方式为:
double (*pf)(int);
3、 使用指针调用函数
double pam(int);double (*pf)(int);pf = pam;double x = pam(4);double y = (*pf)(5);
内联函数
用inline修饰的函数,内联函数的编译代码与其他代码“内联”起来,编译器将使用相应的函数代码来替换常规的函数调用,也将是说有多少次函数调用,该函数的编译代码就有多少副本。另外内联函数无法递归。
默认参数
有默认值得参数一定要在没默认值参数的右边。
函数模板
template <typename AnyType>void Swap(AnyType &a, AnyType &b){ AnyType temp; temp = a; a = b; b = temp;}template <class AnyType>void Swap(AnyType &a, AnyType &b){ AnyType temp; temp = a; a = b; b = temp;}
模板可重载
显示具体化
- 对于给定的函数名,可以有非模板函数、模板函数和显示具体化模板函数以及他们的重载版本
- 显示具体化的原型和定义应以template<>开头,并通过名称来指出类型
- 非模板优于具体化,具体化优于常规模板
// job为一个结构体// 非模板函数void Swap(job &a, job &b);// 常规模板函数template <typename T>void Swap(T &a, T &b);// 具体化模板template <> void Swap<job>(job &a, job &b);
显示实例化与隐式实例化
编译器使用模板来生成函数实例的是隐式实例化,使用显示实例化模板来实例化是显示实例化,需要用<>来指定类型 template <> void Swap(int &a, int &b); // 注意与显示具体化的区别
阅读全文
0 0
- [C/C++]C函数
- c 函数
- C函数
- C 函数
- C函数
- 【C++】函数
- C 函数
- C++:函数
- C函数
- [C++]函数
- C函数
- c 函数
- C函数
- [C++]函数
- C函数
- 【c++】函数
- 【C++】函数
- C 函数
- 使用对象:GPS信号处理
- matlab中几个取整语句的区别
- PHP之浅谈cookie和session
- statusbar toolbar color
- C++中栈区 堆区 常量区
- C++ 函数
- 【学习OpenCV】CV库的调用机制
- 考研阶段的数据结构代码
- Mongodb学习
- 网上商城中遇见的错误
- 杭电题目分类
- Git 分支管理
- 延迟提交表单
- onMeasure,onLoyout,onDraw的测量和布局