指针传参传值等的几种使用实例

51 篇文章 1 订阅

 代码:

#include<iostream>
using namespace std;
//第一个函数以值传递的方式使用指针,所有改变都局限于函数内部,
//当函数执行完毕后既不会改变指针本身的值,也不会改变指针所指的内容。
void SwapPoint1(int *p,int *q){
	int * tmp = p;
	p = q;
	q = tmp;
}
//第二个函数同样以值传递的方式使用指针,
//但是在函数内部通过解引用的方式直接访问内存并修改了指针所指的内容。
void SwapPoint2(int *p,int *q){
	int  tmp = *p;
	*p = *q;
	*q = tmp;
}
//函数的参数形式是int *&,
//其含义是,该参数是一个引用,引用的对象是内存中的一个int 指针,
//使用这种方式可以把指针当成对象,交换指针本身的值。需要注意的是,
//最后一个函数既然交换了指针,当然解引用该指针所得的结果也会相应发生改变。
void SwapPoint3(int *&p,int *&q){
	int * tmp = p;
	p = q;
	q = tmp;
}


int main(){
	int a=5,b=10;
	int *p = &a, *q = &b;
	cout<<"交换前p的值是:"<< p<<"\t"<<"q的值是:"<<q<<endl;
 	cout<<"交换前p所指的值是:"<<*p<<"\t"<<"q所指的值是:"<<*q<<endl;
	cout<<endl;
	SwapPoint1(p,q); 
 	cout<<"交换后p的值是:"<< p<<"\t"<<"q的值是:"<<q<<endl;
 	cout<<"交换后p所指的值是:"<<*p<<"\t"<<"q所指的值是:"<<*q<<endl;
 	
 	cout<<endl; 
	a = 5,b = 10;
 	p = &a,q = &b; 
  	cout<<"交换前p的值是:"<< p<<"\t"<<"q的值是:"<<q<<endl;
 	cout<<"交换前p所指的值是:"<<*p<<"\t"<<"q所指的值是:"<<*q<<endl;
 	cout<<endl;
 	SwapPoint2(p,q); 
 	cout<<"交换后p的值是:"<< p<<"\t"<<"q的值是:"<<q<<endl;
 	cout<<"交换后p所指的值是:"<<*p<<"\t"<<"q所指的值是:"<<*q<<endl;
 	
 	cout<<endl;
 	a = 5,b = 10;
 	p = &a,q = &b; 
  	cout<<"交换前p的值是:"<< p<<"\t"<<"q的值是:"<<q<<endl;
 	cout<<"交换前p所指的值是:"<<*p<<"\t"<<"q所指的值是:"<<*q<<endl;
 	cout<<endl;
 	SwapPoint3(p,q); 
 	cout<<"交换后p的值是:"<< p<<"\t"<<"q的值是:"<<q<<endl;
 	cout<<"交换后p所指的值是:"<<*p<<"\t"<<"q所指的值是:"<<*q<<endl;
 	
 	return  0;
} 

输出:

交换前p的值是:0x66ff24 q的值是:0x66ff20
交换前p所指的值是:5    q所指的值是:10

交换后p的值是:0x66ff24 q的值是:0x66ff20
交换后p所指的值是:5    q所指的值是:10

交换前p的值是:0x66ff24 q的值是:0x66ff20
交换前p所指的值是:5    q所指的值是:10

交换后p的值是:0x66ff24 q的值是:0x66ff20
交换后p所指的值是:10   q所指的值是:5

交换前p的值是:0x66ff24 q的值是:0x66ff20
交换前p所指的值是:5    q所指的值是:10

交换后p的值是:0x66ff20 q的值是:0x66ff24
交换后p所指的值是:10   q所指的值是:5
请按任意键继续. . .

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

What’smean

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值