1.要保留函数对指针所做的改变,可以通过使用该指针的指针作为该函数的形参,在函数中使用*Pointer=Pdata;这么一个方式来保留对该函数外指针的改变。如:
void Function(int** Pointer){
int
Pdata=5;
* Pointer=&Pdata;
}
Int main()
{
int * Pointer;
Function(&Pointer);
}
2.函数不能通过形参传值给实参。其实传指针和传引用都是把地址传给了形参,这样就可以在函数中对这个地址的内容进行改变,改变将会保留,因为无论是在函数外还是函数内都是指向同一个地址,所以只要所作的改变都是针对这个地址的内容,改变都会保留。譬如传入得是一个数组参数,要保留数组的改变,在函数中需要通过改变数组的内容,如:Array[i]=data,这样的方式来保留,而不能直接通过Array=Pointer,因为这样的传值无异于传值方式,不同的只是传值的内容是一个地制值而已。而对于传值方式,只是简单把值copy给了形参,所以所做的任何任何改变讲不保留。函数中的变量什么的都是在栈中执行,函数结束,栈中内容将释放。
传值方式:
int main(){
void swap(int,int);//参数为整型变量
int i=3,j=4;
cout<<"i="<<i<<",j="<<j<<endl;
swap(i,j);//变量名
cout<<"i="<<i<<",j="<<j<<endl;
system("PAUSE");
return 0;
}
void swap(int a,int b){//形参为整型变量
int temp;
temp=a;
a=b;
b=temp;
}
结果是:
i=3,j=4
i=3,j=4
传地址方式:
int main(){
void swap(int*,int*);//参数为整型指针变量
int i=3,j=4;
cout<<"i="<<i<<",j="<<j<<endl;
swap(&i,&j);//变量地址
cout<<"i="<<i<<",j="<<j<<endl;
system("PAUSE");
return 0;
}
void swap(int *p1,int *p2){//形参为整型指针变量
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
结果:
i=3,j=4
i=4,j=3
传引用方式:
int main(){
void swap(int&,int&);//参数为整型变量的引用
int i=3,j=4;
cout<<"i="<<i<<",j="<<j<<endl;
swap(i,j);//变量名
cout<<"i="<<i<<",j="<<j<<endl;
system("PAUSE");
return 0;
}
void swap(int &a,int &b){//形参为引用类型
int temp;
temp=a;
a=b;
b=temp;
} int main(){
void swap(int&,int&);//参数为整型变量的引用 int i=3,j=4;
结果:
i=3,j=4
i=4,j=3
3.在某一函数中对一个全局变量进行的改变将保留。因为全局变量和静态变量在内存中有一块独立的空间程序编译的时候就已经建立了,要区分好与对实参做改变的情况如:
Int i=2;
Void Test()
{
I=3;
}