标题:值传递问题。
只看楼主
菜鸡在线求问
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2018-11-29
结帖率:66.67%
已结贴  问题点数:20 回复次数:5 
值传递问题。
#include <stdio.h>

void swap1(int x, int y)
{
    int tmp;
    tmp = x;
    x = y;
    y = tmp;   
}

int main()
{    int a=3;
     int b=5;
   
     swap1(a,b); //值传递
     printf("a=%d,b=%d\n",a,b);
   
     return 0;
}

出来运行结果 a还是3 b还是5,没有替换,请大佬看看  
搜索更多相关主题的帖子: 值传递 int tmp 运行 结果 
2019-07-19 10:41
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
首先,你明白不明白为什么“没有替换”?
a = 1;
b = a;
b = 2;
此时,a 还是等于 1 你能理解吗?
如果你能理解,那你的代码等价于
int a = 3;
int b = 5;
int x = a;
int y = b;
然后交换 x, y 的值;
但 a 和 b 的值是不变的。

正确的代码应是
程序代码:
#include <stdio.h>

void swap1( int* px, int* py )
{
    int tmp = *px;
    *px = *py;
    *py = tmp;
}

int main( void )
{
    int a = 3;
    int b = 5;

    swap1( &a, &b );
    printf( "a=%d, b=%d\n", a, b );
}

2019-07-19 11:07
菜鸡在线求问
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2018-11-29
得分:0 
回复 2楼 rjsp
懂了。谢谢。值传递是不是只改变形参了。完了之后就没了。实参没有变,要想变只能用地址传递
2019-07-19 11:16
菜鸡在线求问
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2018-11-29
得分:0 
回复 楼主 菜鸡在线求问
void swap1(int *pa,int *pb)
{
int *temp;
temp=pa;
pa=pb;
pb=temp;
}
  
这个函数这样子,感觉也是传地址了,怎么是错的
2019-07-19 11:18
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
int a = 1;
int* p = &a;

如果 *p = 2 的话,那么 a 的值就变为 2 了;
而如果 p = …… 的话,a 当然不变啦。
2019-07-19 11:21
菜鸡在线求问
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2018-11-29
得分:0 
回复 5楼 rjsp
只传地址了,没什么用, 然后*的就是那个地址的值
2019-07-19 11:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-495937-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022490 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved