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指针得到的是指针本身的大小,即对象地址的大小;
指针自增与引用自增意义不一样;
在内存分配上,程序为指针变量分配内存区域,而引用不需要分配内存区域等。
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指针得到的是指针本身的大小,即对象地址的大小;
指针自增与引用自增意义不一样;
在内存分配上,程序为指针变量分配内存区域,而引用不需要分配内存区域等。
相关文章推荐
- JavaScript传递变量: 值传递?引用传递?
- JSP与JS交互问题 值传递
- Java中的值传递和引用传递实例介绍
- C#中的值传递和引用传递详细解析
- python中的对象拷贝示例 python引用传递
- 漫谈C指针:一个指针应用实例
- 漫谈C指针:参数的值传递
- 漫谈C指针:参数传递的三道题目
- java参数传递(值传递还是引用传递)
- 引用传递和值传递,克隆
- 关于Java值传递和引用传递的三点结论
- 关于函数值传递
- 图解C/C++中函数参数的值传递、指针传递与引用传递
- 值传递大练习
- Java 按值传递还是按引用传递详细解说
- 有关java中的参数调用的问题
- java中值传递和引用传递
- C++基础知识学习:变量的初始化
- 关于值传递和引用传递的误区
- C++中的指针与引用、如何参数传递