前言:
本文承接上文,将详细讲述C++中,参数与指针。
一,无响应参数。
首先复习一下之前曾学习过的函数:
void change(int a,int b)
{
int temp;
temp=a;
a=b;
b=temp;
}
看起来是一个简单的交换a与b值的函数。
完整代码为:
# include <iostream>
using namespace std;
void change(int a,int b);
int main(){
int a=10,b=20;
cout<<"Before swapping a= "<<a<<" b= "<<b<<endl;
change(a,b);
cout<<"After swapping a= "<<a<<" b= "<<b<<endl;
return 0;
}
void change(int a,int b)
{
int temp;
temp=a;
a=b;
b=temp;
}
按理来说,已定义a=10,b=20,并且使用了change函数来交换a与b的值,但实际上输出为:
a与b的值并没有真的进行了交换。
二,函数的值传递与引用传递。
这是因为在C++中,函数参数是通过值传递的,即函数内部对参数的修改不会影响到函数外部的变量。因此,change
函数内部的交换操作不会影响到main
函数中的a
和b
。
change函数仅交换了形式参数,即change里的a与b,与实际参数:main函数中的值无关。
一般的值传递无法改变调用源的实际参数。
但如果使用指针,调用函数时就可以改变指定参数的值。具体代码如下:
void change(int *Pa,int *Pb){int temp = *Pa;*Pa = *Pb;*Pb = temp;
}
全部代码为:
# include <iostream>
using namespace std;
void change(int *Pa,int *Pb);//声明函数change
int main(){int a = 10,b = 20;cout<<"变量a和b的初始值: "<<a<<" "<<b<<endl;change(&a,&b);//调用函数changecout<<"变量a和b的交换值: "<<a<<" "<<b<<endl;return 0;
}
//定义函数change
void change(int *Pa,int *Pb){int temp = *Pa;*Pa = *Pb;*Pb = temp;
}
运行结果为: