您的位置:首页 > 编程语言 > C语言/C++

C++中的指针与引用、如何参数传递

2015-10-09 10:25 405 查看
C++语言中,函数的参数和返回值的传递方式有3种:引用传递、指针传递和值传递。

1、引用传递

引用传递传递的是引用对象的内存地址。

引用传递的特点是:被调函数对形参的任何操作都会影响主调函数中的实参变量。

举例说明:

#include<iostream>

using namespace std;

void swap3(int &p,int &q)
{
int temp;
temp =p;
p=q;
q=temp;
cout<<p<<" "<<q<<endl;
}

int main()
{
int x=1,y=2;
swap3(x,y);
cout<<x<<" "<<y<<endl;
}该函数的功能就是交换x和y。

2、指针传递

指针是用来控制对象的内存地址的,它指向单个对象的地址,除了void指针类型外,指针的数据类型与所指向地址的变量数据类型须保持一致。

指针传递只需交换地址即可,举例如下:

#include<iostream>

using namespace std;

void swap2(int *p,int *q)
{
int temp;
temp =*p;
*p=*q;
*q=temp;
cout<<p<<" "<<q<<endl;
}

int main()
{
int x=1,y=2;
swap2(&x,&y);
cout<<x<<" "<<y<<endl;
}该函数的功能就是交换x和y。

3、值传递

值传递是指将要传递的值作为一个副本传递。

在函数调用时,实参把它的值传递给对应的形参,方法执行中形参值不影响实参,即实参的值不会发生改变。即值传递的特点:被调函数对形参的任何操作都是作为局部变量进行的,不会更改主调函数的实参变量的值。

举例说明:

#include<iostream>

using namespace std;

void swap1(int p,int q)
{
int temp;
temp =p;
p=q;
q=temp;
cout<<p<<" "<<q<<endl;
}

int main()
{
int x=1,y=2;
swap1(x,y);
cout<<x<<" "<<y<<endl;
}在此例子中,swap1输出的p和q分别是2,1,但是主函数中输出的值仍不变,分别为1和2。

4、引用传递、指针传递和值传递的区别与联系

(1)、值传递与引用的区别

值传递传递的是值的一个副本,函数对形参的操作不会影响实参的值;而引用传递传递的是引用对象的地址,函数的形参操作会直接影响实参的值,实参的值随着形参的值的改变而改变

(2)、指针与引用的区别

指针是一个实体,而引用是一个别名,指针可以为空,即空指针,但引用不能为空;

引用初始化时必须指向一个对象,之后不能变(但是对象其内容可变),而指针可变;

指针使用前须测试其合法性,防止为空,但引用不要测试其合法性;

引用无需解引用,但指针需要解引用;

sizeof引用得到的是所指对象的大小,而sizeof指针得到的是指针本身的大小,即对象地址的大小;

指针自增与引用自增意义不一样;

在内存分配上,程序为指针变量分配内存区域,而引用不需要分配内存区域等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息