25.函数的参数传递

it2026-09-03  10

函数的参数传递有传值,传地址,传引用

引用的注意事项 1、 引用必须引一块合法的内存空间

//int &a = 10;//10的内存空间是非法

2、不要返回局部变量的引用

int& doWork() { //int &a = 10;//10的内存空间是非法 int a = 10;//10的内存空间是非法 return a; } void test04() { //int &a = 10; // 引用必须引一块合法的内存空间 int &ret = doWork();//反回了局部变量的值,会导致接收的值是乱码 cout << "ret = " << ret << endl; //ret = 10第一次10是编译器做了优化 cout << "ret = " << ret << endl; //ret = 258195888 cout << "ret = " << ret << endl; //ret = 258195888 cout << "ret = " << ret << endl; //ret = 258195888 cout << "ret = " << ret << endl; //ret = 258195888 } // 27函数.cpp : 定义控制台应用程序的入口点。 // #include "iostream" using namespace std; //值传递不会修改变量的值 void mySwap(int a, int b) { int tmp = a; a = b; b = tmp; cout << "mySwap::a = " << a << endl; //mySwap::a = 20 cout << "mySwap::b = " << b << endl; //mySwap::b = 10 } void test01() { int a = 10; int b = 20; mySwap(a, b);//值传递不会修改变量的值 cout << "a = " << a << endl; //a = 10 cout << "b = " << b << endl; //b = 20 } //地址传递,修改变量的值 void mySwap1(int* a, int* b) { int tmp = *a; *a = *b; *b = tmp; cout << "mySwap1::*a = " << *a << endl; //mySwap1::a = 20 cout << "mySwap1::*b = " << *b << endl; //mySwap1::b = 10 } void test02() { int a = 10; int b = 20; mySwap1(&a, &b);//地址递不会修改变量的值 cout << "a = " << a << endl; //a = 20 cout << "b = " << b << endl; //b = 10 } //引用传递 类似传地址,修改变量的值 void mySwap3(int &a, int &b) //&a = a &b = b { int tmp = a; a = b; b = tmp; cout << "mySwap3::a = " << a << endl; //mySwap3::a = 20 cout << "mySwap3::b = " << b << endl; //mySwap3::b = 10 } void test03() { int a = 10; int b = 20; mySwap3(a, b); //引用传递 类似传地址,修改变量的值 cout << "a = " << a << endl; //a = 20 cout << "b = " << b << endl; //b = 10 } //引用的注意事项 //1、 引用必须引一块合法的内存空间 //2、不要返回局部变量的引用 int& doWork() { //int &a = 10;//10的内存空间是非法 int a = 10;//10的内存空间是非法 return a; } void test04() { //int &a = 10; // 引用必须引一块合法的内存空间 int &ret = doWork();//反回了局部变量的值,会导致接收的值是乱码 cout << "ret = " << ret << endl; //ret = 10第一次10是编译器做了优化 cout << "ret = " << ret << endl; //ret = 258195888 cout << "ret = " << ret << endl; cout << "ret = " << ret << endl; cout << "ret = " << ret << endl; } int& doWork2() { static int a = 10;//a是分配为static的 return a; } void test05() { int &ret = doWork2(); cout << "ret = " << ret << endl;//ret = 10 cout << "ret = " << ret << endl;//ret = 10 //如果函数的返回值是引用,那么这个函数调用可以作为左值 doWork2() = 1000; //相当于写了 a = 1000; } int main() { //test01();//值传递不会修改变量的值 //test02();//地址传递,修改变量的值 //test03();//引用传递 类似传地址,修改变量的值 //test04();//反回了局部变量的值,会导致接收的值是乱码 test05(); system("pause"); return EXIT_SUCCESS; }

 

最新回复(0)