关于函数的参数传递问题

心若十年 2018-07-22 12:25:09

函数目的为了使两变量值交换,为什么这个值没有发生交换!小白求大神讲解
...全文
492 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿七七七 2018-08-29
  • 打赏
  • 举报
回复
1楼正解,楼主这样是没有修改到变量本身的值的
cjzzmdn 2018-08-27
  • 打赏
  • 举报
回复
没人说 形参 与 实参吗
_肆 2018-08-27
  • 打赏
  • 举报
回复
用指针,直接修改地址里的值,可行
int main(int argc, char* argv[])
{
int i = 3, j = 5;
void swap(int* a, int *b);
swap(&i, &j);
printf("%d %d\n", i,j);
return 0;
}
void swap(int* a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
_肆 2018-08-27
  • 打赏
  • 举报
回复
swap只是个局部函数,没有返回值,对主函数没有任何影响,他只是用a复制了i的值,用b复制了j的值,交换了a和b,当执行完swap后,就退出局部函数,没有影响i和j
棉猴 2018-08-27
  • 打赏
  • 举报
回复
普通的非引用类型的参数通过复制对应的实参实现初始化。当用实参副本初始化形参时,函数并没有访问调用所传递的实参本身,因此不会改变实参值。

请参考《C++中函数的数组形参》
希望能够帮到你
  • 打赏
  • 举报
回复
这个函数是 值传递 ,也就是说 你在调用这个函数的时候,先是把实参 拷贝给形参,然后函数里面都是对形参的计算,自始至终都不设计实参的计算
Lagrangei 2018-08-25
  • 打赏
  • 举报
回复
只有传地址才能改变
自信男孩 2018-07-24
  • 打赏
  • 举报
回复
传地址到形参
yakeMili 2018-07-24
  • 打赏
  • 举报
回复
主函数(main函数)把数据a,b传给swap函数时是先把值复制一份,然后把复制的值传递给swap函数,因为函数间的关系是除了参数传递和返回值和表明公共的数据和指针有联系以外是没有任何关联或者数据共用的(甚至你可以在两个函数中命名相同的数据),就相当于你在你在这个时空找到了女朋友但是对另一个时空一点影响也没有。你学了指针后就能改变这种情况了。
赵4老师 2018-07-24
  • 打赏
  • 举报
回复
http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素
devil000008 2018-07-23
  • 打赏
  • 举报
回复
可以把第二句void swap(int a,int b);删掉
陆人葭 2018-07-22
  • 打赏
  • 举报
回复
查查C++函数参数和返回值的实现原理,以及值传递、引用和指针,这种问题就会非常清楚了。
  • 打赏
  • 举报
回复
值传递,传递的是原先变量的一份拷贝,无论如何操作,也只是对副本进行操作,并不会对原先变量产生任何影响。

可以传递指针或引用:


void swap(int& a, int& b)
{
int temp = a;
a = b;
b = temp;
}
swap(i, j);

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

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧