如何解决参数的单一传递性来改变主函数里的值
来源:互联网 发布:sql二进制数据导出 编辑:程序博客网 时间:2024/05/16 06:03
(1)首先我们定义一个函数swap,它的作用是交换两个变量a和b的值
void swap(int *p1, int *p2)
{
int temp;
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
swap 函数的两个形参p1和p2是指针变量
然后再写主函数
int main()
{
int a = 4, b = 6;
int *p3;
int *p4;
p3 = &a;
p4 = &b;
swap(p3, p4);
prinrtf(“a = %d, b = %d”,a, b);
return 0;
}
分析一下, main程序运行时,a和b的地址分别赋给p3和p4,使p3指向a,p4指向b。 然后进行值传递此时的实参p3和p4是指针变量,形参p1和实参p3都指向了变量a,形参p2和实参p4都指向了变量b,都是两个指针变量指向了同一个内存区域,都可以对内存里的值进行修改,然后执行swap函数,*p1和*p2的值互换,也就是a和b的值进行互换,函数执行完成后,形参被释放掉了,a的值与b的值也进行了交换。
如果下面着这种形式就不对了,int*temp定义了一个整形的指针变量,*temp是指针指向的变量,但是temp中并无确定值,所以temp所指向的单元也是不确定的,而*p1就是a,就是整形变量,所以不对。
void swap(int *p1, int *p2)
{
int*temp;
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
再看下面这个函数
void swap(int x, int y)
{
int temp;
temp = x;
x = y;
y = temp;
}
如果在main函数中掉用swap函数,那么a与b的值就不会被改变了,因为形参和实参的传递关系为单向传递,只能由实参传给形参。
了解了实参和形参的关系后,我们就可以很好的利用它们,为了使在函数中改变了的值能被main函数使用,我们不能采取把要改变值的变量作为参数的办法,而应该采用指针变量作为函数参数,这样经过函数调用后,这些变量值的变化依然可以保留下来 。
- 如何解决参数的单一传递性来改变主函数里的值
- Delphi里函数参数传递的问题
- Python里的函数参数传递方式(表现为非值传递也非引用传递)
- 如何解决网页的参数传递问题
- 函数参数是如何传递的
- 函数参数是如何传递的
- javascript的回调函数里如何传递参数
- javascript的回调函数里如何传递参数
- 理解JAVA里的所有参数传递都是值传递
- 使用函数传递参数来执行相应的数据库操作
- 给初学者提个醒:C/C++函数里的指针参数也是按值传递的!
- 函数的参数传递
- 函数的参数传递
- 函数参数的传递
- 函数的参数传递
- 函数参数的传递
- 函数的参数传递
- 函数的参数传递
- UIScrollView控件实现图片轮播
- 高性能之内存池
- -[__NSCFNumber rangeOfCharacterFromSet:]: unrecognized selector sent to instance 0x7fa5216589d0
- make: Warning: File `Makefile' has modification time 2.4e 08 s in the future
- Makefile
- 如何解决参数的单一传递性来改变主函数里的值
- 类型转换操作符Cast Operators
- Cocos2d-x《雷电大战》(1)-双层地图无限滚动
- js中 ==与=== 区别
- Instruments使用技巧
- 16.HCNA-HNTD——STP原理与配置
- 萦绕在爱情深处最细微的感伤
- [C/C++]_[中级]_[数据地址对齐]
- 基础算法之动态规划