1. 函数的形参,实参
#include <iostream>
using namespace std;
int add(int a, int b); //a, b为形参
int main ()
{
int c = 10; //c,d 为实参
int d = 20;
int e = add(c,d);
cout << "e:" << e << endl;
return 0;
}
int add(int a, int b)
{
int c = a + b;
return c;
}
2. 函数的值传递
当我们做值传递的时候,函数的形参发生改变,并不会影响实参的值。
#include <iostream>
using namespace std;
//值传递
//定义函数, 实现两个数字进行交换函数
void swap(int num1, int num2);
int main ()
{
int a = 10;
int b = 20;
cout << "a: " << a << endl;
cout << "b: " << b << endl;
//当我们做值传递的时候,函数的形参发生改变,并不会影响实参的值。
swap(a, b);
cout << "a: " << a << endl;
cout << "b: " << b << endl;
return 0;
}
//如果函数不需要返回值,声明的时候可以写void
void swap(int num1, int num2)
{
cout << "交换前:" << endl;
cout << "num1: " << num1 << endl;
cout << "num2: " << num2 << endl;
int temp = num1; //temp在函数执行完之后,被释放
num1 = num2;
num2 = temp;
cout << "交换后:" << endl;
cout << "num1: " << num1 << endl;
cout << "num2: " << num2 << endl;
//return; 返回值不需要的时候,可以不写return
}
变量内存释放参考 https://www.cnblogs.com/chuncn/archive/2011/04/12/2014273.html
3. 函数的声明
#include <iostream>
using namespace std;
//函数声明
//比较函数实现两个整形数字进行比较,返回较大的值
//提前告诉编译器函数的存在,可以利用函数的声明
//函数声明可以写多次, 但是定义函数只能有一次
int max(int a, int b); //将函数声明放到头文件(.h)中
int main()
{
int a = 10;
int b = 20;
cout << max(a, b) << endl;
}
int max(int a, int b)
{
return a > b ? a : b;
}
三目运算符参考 http://c.biancheng.net/view/1363.html
4.函数的分文件编辑
作用:让代码结构更加清晰
函数分文件编写一般有4个步骤:
(1) 创建后缀名为.h的头文件
(2) 创建后缀名为.cpp的源文件
(3) 在头文件中写函数声明
(4) 在源文件中写函数的定义
一般工程文件由三部分组成 头文件(.h) 函数分文件(.cpp) 主函数文件(main.cpp)。
头文件(.h)中包含 #include <iostream> , using namespace std等等、声明的函数变量 int a; int b;等等、声明函数 int swap();等等。编辑完成后,比如把头文件保存为 swap.h
之后在函数分文件(.cpp)中 ,第一行 写 include "swap.h" ,同理主函数文件(main.cpp)第一行也要写 include "swap.h", 说明头文件和函数分文件(.cpp) 主函数文件(main.cpp)是有关联的。其中,swap.h是我们自定义的头文件 所以include 后面接的是引号。
接下来进行详细说明
工程目录下的文件如下图所示
头文件 swap.h
#include <iostream>
using namespace std;
void swap(int,int);
函数分文件function4.cpp
#include "swap.h"
void swap(int num1, int num2)
{
cout << "交换前:" << endl;
cout << "num1: " << num1 << endl;
cout << "num2: " << num2 << endl;
int temp = num1;
num1 = num2;
num2 = temp;
cout << "交换后:" << endl;
cout << "num1: " << num1 << endl;
cout << "num2: " << num2 << endl;
}
主函数文件 main.cpp
#include "swap.h"
int main ()
{
int a = 10;
int b = 20;
cout << "a: " << a << endl;
cout << "b: " << b << endl;
swap(a, b);
cout << "a: " << a << endl;
cout << "b: " << b << endl;
return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(test)
add_executable(aaaa function4.cpp main.cpp)
终端
mkdir build
cd build
cmake ..
make
./aaaa
5. 关于自定义头文件的说明
自定义的头文件要么和源代码文件放在同一处,要么在编译的时候指明自定义头文件路径,这样编译器才能找到头文件,才能编译通过。
我遇到的错误: 自定义的头文件放到include文件夹下,但是在编译的时候没有指定头文件路径,就会报错没有找到 *.h的头文件。
自定义头文件编译方式1:
自定义的头文件和源代码文件放在同一处
自定义头文件编译方式2:
cmake声明头文件目录
include_directories("D:/OSGEARTH/include")
具体如下:
目录,include中有 swap.h文件, src中有function4.cpp 和 main.cpp
swap.h文件没有变化,function4.cpp main.cpp第一行的 #include "swap.h" 也可以写成 #include <swap.h>
前提是在编译的时候声明头文件目录,重点是添加了include_directories("./include")这句话。
CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(test)
include_directories("./include")
add_executable(aaaa ./src/function4.cpp ./src/main.cpp)