函数中的指针

#include"iostream"   //A程序
using namespace std;
int * f(int *p)
{
	
	p=NULL;
	return p;
}
main()
{

 int q=5;
 int *s;
 s=&q;
 cout<<s<<endl;
 cout<<&q<<endl;
 s=f(&q);
 cout<<s<<endl;
 cout<<&q<<endl;

}

从结果可以看出    虽然s=&q,  但之后s的改变并未对&q造成影响,2个指针指向同一地址,将其中一个改变(地址改变),另一个也不会变(是地址不会变)


#include"iostream"  //  B程序
using namespace std;
void f(int *p)
{
	*p=4;
	cout<<*p<<endl;
}
main()
{

 int q=5;
 int *s;
 s=&q;
 f(&q);
 cout<<q<<endl;
 cout<<*s<<endl;
}

结果为:

4

4

4

对比上一个A程序,2个指针指向同一地址,但若函数中进行的操作是改变指针所指向的值,函数结束后2个指针所指向的值都改变,这和指针传值swap(a,b)可以实现交换原理一致,指针的传值交换,无法交换

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



若swap函数是对a和b所指向的值进行交换,不是单纯的交换指针,可以实现交换

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

#include"iostream"  //C程序
using namespace std;
void f(int *p)
{
	p=NULL;
	cout<<p<<endl;
}
main()
{

 int q=5;
 cout<<&q<<endl;
 f(&q);           
 cout<<&q<<endl;  

}

这里相当于传值,形参的改变不会对实参造成影响,从1程序可以解释:就算2个指针指向同一地址,将其中一个改变,另一个也不会变
f(&q)中进行的操作可以认为是:将&q复制了一份拷贝(与&q地址一样),将这份拷贝进行了处理,函数结束后,只是对拷贝进行了处理,&q没有并没有变,这和利用传值交换2个值是一样的



#include"iostream"   //D程序
using namespace std;
void f(int *p)
{
	*p=4;
	cout<<*p<<endl;
}
main()
{

 int q=5;
 f(&q);
 cout<<q<<endl;

}
结果为:

4

4

可以看出      如果函数中指针所指向的值发生改变,函数结束后值就发生了改变

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值