注册 登录
编程论坛 C语言论坛

值传递问题。

菜鸡在线求问 发布于 2019-07-19 10:41, 1692 次点击
#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,没有替换,请大佬看看  
5 回复
#2
rjsp2019-07-19 11:07
首先,你明白不明白为什么“没有替换”?
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 );
}

#3
菜鸡在线求问2019-07-19 11:16
回复 2楼 rjsp
懂了。谢谢。值传递是不是只改变形参了。完了之后就没了。实参没有变,要想变只能用地址传递
#4
菜鸡在线求问2019-07-19 11:18
回复 楼主 菜鸡在线求问
void swap1(int *pa,int *pb)
{
int *temp;
temp=pa;
pa=pb;
pb=temp;
}
  
这个函数这样子,感觉也是传地址了,怎么是错的
#5
rjsp2019-07-19 11:21
int a = 1;
int* p = &a;

如果 *p = 2 的话,那么 a 的值就变为 2 了;
而如果 p = …… 的话,a 当然不变啦。
#6
菜鸡在线求问2019-07-19 11:25
回复 5楼 rjsp
只传地址了,没什么用, 然后*的就是那个地址的值
1