求大神详解:为什么这个不能交换两个数

#include
#include
int main()
{
int a, b;
a = 5;
b = 9;
Swap( a, b );
printf("a=%d,b=%d",a,b);
return 0;
}
void Swap( int x, int y )
{
int temp;
temp = x;
x = y;
y = temp;
}

1.会报错是因为你将函数定义在了函数的外部,因此在main函数中,应该对该函数进行声明;
2.你这样的函数调用方式(值传递)是不会改变主函数中的值得;应该采用地址传递;代码如下:

#include<stdio.h>
#include <stdlib.h>
  /*值传递的形式*/
void Swap( int x, int y );
void Swap01( int *x, int *y )
    {
      int temp;
      temp = *x;
      *x = *y;
      *y = temp;
    }
int main()
    {
    int a, b;
    a = 5;
    b = 9;
    puts ("----------------");
    printf("a=%d,b=%d\n",a,b);
    Swap( a, b );
    puts ("----------------");
    Swap01 (&a,&b);
    printf("a=%d,b=%d\n",a,b);

    system ("pause");
    return 0;
    }
void Swap( int x, int y )
    { 
    int temp;
    temp = x;
    x = y;
    y = temp;
    printf ("a = %d,b = %d\n",x,y);
    }


图片说明

不知道是不是我的原因。我这显示你的include后面没有东西。而且Swap函数定义放在了调用之后

是语法错误吗?头文件没加上,还有输出语句引号里用空格就可以。

#include

void Swap( int x, int y )
{
int temp;
temp = x;
x = y;
y = temp;
printf("a=%d,b=%d",x,y);
}

int main()
{
int a, b;
a = 5;
b = 9;
Swap( a, b ); //调用函数,因为函数在上面,不用声明。

return 0;
}

形式参数是无法修改实参的,建议你不要用调用函数的方法!或者改用指针!

建议看看形参与实参的传递。

有两个错误:
1.函数传参的时候使用的是传值,而不是传址,所以交换没用,建议改用指针
2.Swap()定义在主函数的后面,所以应该会出现未定义错误,建议在主函数前面声明一下Swap()

#include

void Swap( int &x, int &y )
{
int temp;
temp = x;
x = y;
y = temp;
printf("a=%d,b=%d",x,y);
}

int main()
{
int a, b;
a = 5;
b = 9;
Swap( a, b ); //调用函数,因为函数在上面,不用声明。

return 0;
}
swap的参数用引用或者指针即可.

形参改变,实参并没有变。

你只是把值传递进去了,你看到的交换只是在子程序中的交换

值传递不影响main方法里的参数

数传递的方式有三种:值传递、引用传递、指针传递。能够将形参的数传到实参的后两种可以实现。

C语言值传递和地址传递的区别问题。http://blog.sina.com.cn/s/blog_66ec4d660100pt5g.html