1 // C++函数和类 02-传参数.cpp: 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include <iostream> 6 #include <string> 7 #include <array> 8 #include <climits> 9 #include <math.h> 10 using namespace std; 11 12 //传值参数有两种方式: 13 //1.将实参的实际值复制给函数的形参。在这种情况下,修改函数内的形参对实参没有影响。 14 //2.将参数的地址复制给形参(指针)。因为指针使我们可以间接的访问它所指的对象,所以通过指针可以修改它所指对象的值。 15 int reset(int i); 16 void reset1(int *pi); 17 int min(int num1, int num2, int num3, int &max); 18 int reset(int i); 19 int main() 20 { 21 int num = 10; 22 cout << "reset:" << reset(num) << endl; 23 cout << "实参 num:" << num << endl; 24 cout << "num的地址:" << &num << endl; 25 reset1(&num); 26 cout << "reset1:" << num << endl; 27 cout << "num的地址:" << &num << endl; 28 //输出结果: 29 //reset:20 30 //实参 num : 10 31 //num的地址:0116FD38 32 //reset1 : 20 33 //num的地址:0116FD38 34 35 reset(num); 36 cout << num << endl; 37 38 int maxNum; 39 int minNum; 40 minNum = min(20, 15, 23, maxNum); 41 cout << "最大值为:" << maxNum << endl; 42 cout << "最小值为:" << minNum << endl; 43 44 return 0; 45 } 46 47 //传递实参的实际值,将实参的值拷贝给形参,函数体中修改的是形参的值。对实参不产生影响。 48 int reset(int i) 49 { 50 i *= 2; 51 return i; 52 } 53 //传递的实参的地址,修改*pi的值,就是修改指针实参指向的对象的值。修改pi的值,是修改形参存储的地址,不影响实参的地址。 54 void reset1(int *pi)//int类型的指针 形参 55 { 56 *pi *= 2; //修改的是形参储存的地址的值,不影响实参的地址。 57 pi = 0; 58 //*pi = 0; //错误的,因为pi指针的的地址已经被修改。 59 } 60 61 //传引用参数: 62 //引用:引用是已定义的变量的别名。对于引用的操作实际上是作用在引用所引的对象上的。它们共用相同的内存空间, 63 //传引用参数:通过将引用变量用作参数,函数将使用原始数据,而不是其副本。 64 65 //将引用变量作为参数,函数的使用时原始数据,而不是副本。 66 //对形参的修改其实就是对实参的修改。 67 68 //用途: 69 //1.当某种类型不支持拷贝操作,或是需要拷贝的对象太大时,我们可以通引用形参来访问对象。 70 //2.当函数需要同时返回多个值时,可以使用引用形参来处理。 71 void rest(int &i) //&i是地址。 72 { 73 i = i * 2; 74 } 75 76 //函数的返回为int类型,返回是3个数中的最小值 77 //定义了一个应用类型的参数,通过这个参数修改maxNum的值。 78 int min(int num1, int num2, int num3, int &max) 79 { 80 int temp1, temp2; 81 temp1 = num1 < num2 ? num1 : num2; 82 temp1 = temp1 < num3 ? temp1 : num3; 83 84 temp2 = num1 > num2 ? num1 : num2; 85 temp2 = temp2 > num3 ? temp2 : num3; 86 87 max = temp2; 88 return temp1; 89 }