C++ 函数的参数传递
函数的参数传递
1、函数的形参的内存空间问题:
在未调用函数前,函数中的形式参数并不分配内存空间。只有在被调用执行时,才被分配临时存储空间。
函数调用结束后,形式参数的内存空间将被操作系统立刻收回。
2、函数的参数:
实际参数可以是任何符合形式参数类型的常量、变量、表达式。
函数参数传递的过程就是实际参数和形式参数相结合的过程,
必须遵守三个一致:个数一致,顺序一致,类型一致。 √√√
3、函数参数的传递方式,或者说函数参数的调用方式分为三种:
(1) 传值(调用):函数形参变,原值不变 √√√
#include<iostream>
using namespace std;
void swap(int x,int y){
int temp;
temp = x;
x = y;
y = temp;
cout << "传值:x=" << x << " " << "y=" << y << endl;
}
int main(){
int a = 10,b = 50;
swap(a,b);
cout << "原值:a=" << a << " " << "b=" << b << endl;
return 0;
}
输出(函数中传值只会变形参的值,原值不变):
传值:x=50 y=10
原值:a=10 b=50
(2) 传址(调用):函数形参变了,原值也会变 √√√
#include<iostream>
using namespace std;
void swap(int *x,int *y){// 形式参数的类型定义为指针
int temp;
temp = *x;
*x = *y;
*y = temp;
cout << "传址:x=" << *x << " " << "y=" << *y << endl;
}
int main(){
int a = 10,b = 50;
swap(&a,&b);// 实际参数必须是地址
cout << "原值:a=" << a << " " << "b=" << b << endl;
return 0;
}
输出(传址:函数形参变了,原值也会变 ):
传址:x=50 y=10
原值:a=50 b=10
(3) 引用(调用):
(1.1)int& k_adr = k,导致地址相同,值之后会一同进行改变 √√√
#include <iostream>
using namespace std;
int main(){
int k = 32;
// 因为int& k_adr = k,所以k与 k_adr de地址现在一样,以后值一起改变
int& k_adr = k;
cout << " int& k_adr = k的结果: "<< " k= " << k << " k_adr= " << k_adr << endl;
k++;
cout << " k++ 的结果:"<< " k= " << k << " k_adr= " << k_adr <<endl;
k_adr = -5;
cout << " k_adr = -5的结果: "<< " k= " << k << " k_adr= " << k_adr << endl;
int i = 100;
k_adr += i;
cout << " i = 100,k_adr += i的结果: "<< " k= " << k << " k_adr= " << k_adr << endl;
return 0;
}
输出:
int& k_adr = k的结果: k= 32 k_adr= 32
k++的结果: k= 33 k_adr= 33
k_adr = -5的结果: k= -5 k_adr= -5
i = 100,k_adr += i的结果: k= 95 k_adr= 95
(1.2)函数形参&a &b 之后,函数中的a b与原值a b都会改变
#include<iostream>
using namespace std;
void swap(int &a,int &b){
int temp;
temp = a;
a = b;
b = temp;
cout << " &a &b之后a b的值:" << a << " " << b << endl;
}
int main(){
int a = 10,b = 50;
swap(a,b);
cout << " 原值a b的值:" << a << " " << b << endl;
return 0;
}
输出:(函数形参&a &b 之后,函数中的a b与原值a b都会改变)
&a &b之后a b的值:50 10
原值a b的值:50 10