参考链接
函数
在程序执行过程中,必须含有主函数main,因为这是程序的入口。但是我们在写工程的工程中,只有一个主函数是不可以的,因为这样代码的可读性就很差。面对这个问题,C++可以在程序中申请多个函数。下面来看一下函数的定义方式:
数据类型 函数名(形式参数)
{
/*核心函数*/
}
其实函数我们已经在前面程序使用过,下面我们在来看一下:
#include <iostream>
using namespace std;
//声明函数
int changeArrayFun1(int *iTmpAddr, int size); //函数必须在主函数声明后在使用
int main()
{
int iArrayVar1[5] = {0, 1, 2, 3, 4}; //初始化一维数组
int iArrayVar2[2][3] = { 1, 2, 3, 4, 5, 6 }; //初始化二维数组
changeArrayFun1(iArrayVar1, 5);
int *iPointVar = iArrayVar1;
for (int iId = 0; iId < 5; iId++)
{
cout << *iPointVar << " ";
iPointVar++;
}
getchar();
}
int changeArrayFun1(int *iTmpAddr, int size) //创建函数
{
for (int iId = 0; iId < size; iId++)
{
*iTmpAddr =1;
iTmpAddr++;
}
return 1;
}
运行结果
1 1 1 1 1
注:int changeArrayFun1(int *iTmpAddr, int size)就是创建的函数,我们在使用子函数的时候,要么在main函数前创建,要么在main函数前进行声明。
上面是我们使用非常多的函数定义方式,C++11还提供了匿名函数的支持:Lambda 函数。Lambda把函数当做对象,来进行赋值变量、函数传值、求值操作。我们来看下Lambda函数语法:
//当存在返回类型时
[函数对象参数](传入参数)->返回类型{/*函数体*/}
//当无返回类型时
[函数对象参数](传入参数){/*函数体*/}
代码进行实例分析:
#include <iostream>
using namespace std;
int main()
{
int iVar1 = 3;
auto lambdaFunc1 = [](int x) { return x; }; //声明lambda表达式
auto lambdaFunc2 = [&iVar1](int x) { iVar1 = x + 1;}; //声明lambda表达式
cout << lambdaFunc1(iVar1) << endl;
lambdaFunc2(iVar1);
cout << iVar1 << endl;
getchar();
}
运行结果
3
4
注:在上面程序我们看到第二个lambda表达式的创建,引用了外部变量。所以在这里要聊聊如何引用外部变量。在lambda中这些引用的外部变量称为一个闭包,他们主要是通过[]来进行控制。
[] // 沒有定义任何变量。使用未定义变量会引发错误。
[x, &y] // x以传值方式传入(默认),y以引用方式传入。
[&] // 任何被使用到的外部变量都隐式地以引用方式加以引用。
[=] // 任何被使用到的外部变量都隐式地以传值方式加以引用。
[&, x] // x显式地以传值方式加以引用。其余变量以引用方式加以引用。
[=, &z] // z显式地以引用方式加以引用。其余变量以传值方式加以引用。
注:lambda函数也可以直接使用this指针,它的使用方式:
[this](){this->函数处理部分;}();
基本数学函数
这里其实说的是<cmath>标准函数里面被别人已经写好的基本数学实现函数,我们每个人想玩的话都可以自己写。因为这个只是一个调用函数的事情,所以这里我直接给出别人的一个链接,自己用的时候查看一下就可以。