`

c++ pirmer 学习笔记之参数的传递

 
阅读更多

1.非引用形参
普通的非引用类型的参数通过复制对应的实参是先初始化,当用实参副本初始化形参

是,函数并没有访问调用所传递的实参本身,二师改变的那个实参副本。因此不会改

变实参的值。 相当于局部参数一样,调用完了就没有了。
结合如下示例#include "stdafx.h"
#include<iostream>
using namespace std;

int gcd(int v1,int v2)
{
while(v2){
int temp =v2;
v2=v1%v2;
v1=temp;

}
return v1;
}
int aa(int a){
return a>0?a:(-a);
}
int Power(int radix,int index)
{
int times = index,sum = 1;
if(times==0)
return 1;
else
{
while(times--)
{
sum *= radix;
}
return sum;

}
}
int squre(int v1,int v2)
{
int sum=1;
while(v2>0){
sum*=v1;
v2--;
}
return sum;

}

int _tmain(int argc, _TCHAR* argv[])
{
cout <<"请输入两个数字";
int i=2,j=10;
//cin>>i>>j;
//cout<< "两个数字的公约输是"<<squre(i,j)<<endl;
cout<< "所得结果是"<<squre(i,j)<<endl;
cout<< "所得结果是"<<Power(i,j)<<endl;
cout<<i<<" "<<j<<endl;

cout<< "所得结果是"<<aa(i)<<endl;
return 0;
}
1,指针形参
函数的形参可以是指针此时将复制实参指针,与其他非引用类型的形参一样,该落泪

形参的任何改变也仅作用于局部副本。

事实上被复制的指针只影响对指针的赋值,如果函数形参是非const类型的指针,则

函数可通过指针实现赋值,修修改指针所指向对象的只
void reset(int *p){
*ip=0;
ip=0;
}


通过调用实参保持原来的值,但是他所指向的对象的值将变为0;
int i=42;
int *p=&i;
cout<<"i"<<*p<<endl;
reset(p);
cout<<*p<<endl;

可以将指向const对象的指针初始化为非const对象,但不可以让指向飞const独享的

指针指向const对象。

// inverse.cpp : 定义控制台应用程序的入口点。
//编写函数交换两个int型指针所指向的值调用并检验该函数,输出交换后的值

#include "stdafx.h"
#include <iostream>
using namespace std;


void inverse(int * v1,int *v2)
{
int temp=*v1;
*v1=*v2;
*v2=temp;

}
int _tmain(int argc, _TCHAR* argv[])
{
int i=10;
int j=20;
int *a=&i;
int *b=&j;
cout<<"before inverse()"<<endl;
cout<<i<<j<<endl;
inverse(a,b);
cout<<"after inverse()"<<endl;
cout<<i<<" "<<j<<endl;


return 0;
}

4.非const引用形参只能与完全同类型的非const对象相关联。

应该将不需要修改的引用形参定义为const引用。普通的飞const引用形参在使用时不太灵活这样的此乃更惨既不能用const对象初始化,也不能用字面值或产生的幼稚的表达式实参初始化。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics