C/C++指针调用使用误区
#include
<iostream
>
#include
<stdlib
.h
>
using namespace std
;
void swap_int(int
*a
,int
*b
)
{
cout
<<"这是函数内部:"<<endl
;
cout
<<"形参a的值(地址):"<<a
<<"\t"<<"形参b的值(地址):"<<b
<<"\n";
int
*temp
;
temp
= a
;
a
=b
;
b
=temp
;
cout
<<"*****"<<"交换之后"<<"******"<<endl
;
cout
<<"形参a的值(地址):"<<a
<<"\t"<<"形参b的值(地址):"<<b
<<"\n";
cout
<<"读取形参a和b对应地址的值:"<<*a
<<"\t"<<*b
<<endl
;
cout
<<"函数调用完成******END"<<endl
;
cout
<<"\n\n\n\n";
cout
<<"实际上这里的a和b被声明成int类型的指针用于保存传进来的地址"<<endl
<<"单纯将地址这两个形参的值作交换仅仅将这两个形参变量中保存的地址值做了交换"<<endl
<<"这种交换实际上是成功的,但是执行完毕,形参被释放掉,就毫无作用"<<endl
<<"将这里的形参改写成c和d效果更明显"<<endl
<<"\n\n\n\n"
<<"int temp;"<<endl
<<"temp = *a;"<<endl
<<"*a = *b"<<endl
<<"*b = temp;"<<endl
;
cout
<<"才是对地址中的变量做改变"<<"地址的读写"<<endl
;
cout
<<"\n\n\n\n";
}
int
main(void)
{
int a
=1,b
=2;
swap_int(&a
,&b
);
cout
<<"函数调用完成后返回主函数:"<<endl
;
cout
<<"实际上,a和b的值没有发生交换:"<<a
<<"\t"<<b
<<endl
;
return 0;
}
**
执行结果:
这是函数内部:
形参a的值(地址):0x7fffc4ddf2f8 形参b的值(地址):0x7fffc4ddf2f4
*****交换之后******
形参a的值(地址):0x7fffc4ddf2f4 形参b的值(地址):0x7fffc4ddf2f8
读取形参a和b对应地址的值:2 1
函数调用完成******END
实际上这里的a和b被声明成int类型的指针用于保存传进来的地址
单纯将地址这两个形参的值作交换仅仅将这两个形参变量中保存的地址值做了交换
这种交换实际上是成功的,但是执行完毕,形参被释放掉,就毫无作用
将这里的形参改写成c和d效果更明显
int temp;
temp = *a;
*a = *b
*b = temp;
才是对地址中的变量做改变地址的读写
函数调用完成后返回主函数:
实际上,a和b的值没有发生交换:1 2
**