查看文章
 
C++函数参数传递
2008-03-11 20:09

函数参数传递分为指针,值,引用传递。

值传递不会更改实参的值:原因是在利用值传递的时候,程序会在栈中分配一个形参空间,然后用实参的值初始化它,这个形参在栈中的位置跟实参在栈中的位置是完全不同的,因此我们对形参的修改不会对实参产生影响,在推出函数后,形参的内存被释放,形参消失。

下面的例子是指针传递。

#include <iostream>
using namespace std;
void swap(int* a,int* b);

int main()
{
int x,y;
x=1;y=2;
    swap(&x,&y);
cout<<x<<" "<<y<<endl;

return 0;
}
void swap(int* a,int* b)
{
int temp;
temp=*a;
    *a=*b;
   *b=temp;
}

引用传递:引用可以这样认为,它指向一块内存,这块内存从一开始就必须是固定的,不能改变的,因此这就是为什么引用在声明时就必须初始化,它是实参的另一个名字,对形参的修改同样可以改变实参的值。

引用传递例子:

#include <iostream>
using namespace std;
void swap(int &a,int &b);

int main()
{
int x=1;
int y=2;

    swap(x,y);
cout<<x<<y<<endl;

return 0;
}
void swap(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;

}

结构体也可以作为参数来传递。它作为参数的规则完全和内置类型是一样的。

数组做为参数传递的时候规则会稍微不一样下面是我们的一个例子:

#include <iostream>
using namespace std;
void copy(int a[],int b[]);

int main()
{
int x[2]={0,1};
int y[2];

    copy(x,y);
cout<<y[0]<<" "<<y[1]<<endl;

return 0;
}
void copy(int a[],int b[])
{
b[0]=a[0];
b[1]=a[1];
}

上面的数组作为传递的时候看出来什么不好的地方了没?是的 我们的第一个参数a[]是不允许在操作过程中被改变的,所以我们可以用const修饰它。这样我们的程序更健壮,更容易理解。


类别:c/c++||添加到搜藏 |分享到i贴吧|浏览(394)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu