C中的交换问题[初学者]

时间:2016-05-17 17:09:24

标签: c pointers swap

我被要求在2个整数之间进行交换。

#include <stdio.h>
#include <stdlib.h>

void swaplol(int a, int b)
{
    int tmp;
    tmp = a;
    a = b;
    b = tmp;

    printf("After the swap : a= %d, b=%d\n",a,b);

}

我不知道问题出在哪里。一切看起来都很合理......

int main(void)
{
    int a,b;
    a = 666;
    b = 998;

    printf("Before the swap a = %d, b = %d\n",a,b);

    swaplol(a,b);

    return 0;
}

由于

5 个答案:

答案 0 :(得分:2)

你需要将整数的地址传递给swap函数,这样当交换值时,你会在main中交换a和b值。因此,您必须将swaplol函数更改为接受指针而不是整数。

#include <stdio.h>
#include <stdlib.h>

void swaplol(int *a, int *b)
{
    int tmp;
    tmp = *a;
    *a = *b;
    *b = tmp;

    printf("After the swap : a= %d, b=%d\n",*a,*b);

}

int main(void) {
    // your code goes here
    int a,b;
    a = 666;
    b = 998;

    printf("Before the swap a = %d, b = %d\n",a,b);

    swaplol(&a,&b);
    printf("After the swap : a= %d, b=%d\n",a,b);
    return 0;
}

答案 1 :(得分:1)

交换函数应该交换main中声明的原始变量的值。

为此,函数必须通过引用接受变量。

您应该从函数中删除输出语句并将其放在main中以证明原始变量已被交换。

例如

<stdlib.h>

无需包含标题Parse error: syntax error, unexpected 'if' (T_IF) in C:\xampp\htdocs\PCzone\login.php on line 136

答案 2 :(得分:0)

使用指针:

    void swaplol( int * a, int * b )
    {
        int tmp;
        tmp = *a;
        *a = *b;
        *b = tmp;
    }

    int main(void)
    {
       int a, b;
       a = 666;
       b = 998;

       printf( "Before the swap a = %d, b = %d\n", a ,b );
       swaplol( &a, &b);
       printf( "After the swap : a= %d, b=%d\n", a, b );

       return 0;
    }

答案 3 :(得分:0)

只需添加指针..我在不使用临时变量的情况下提供代码段。

int main()
{
  ....
  ....
  swaplol(&a,&b);
}
int swaplol(int *a,int *b)
{
  *a=*a+*b;
  *b=*a-*b;
  *a=*a-*b;
   printf("a=%d,b=%d",a,b);
}

答案 4 :(得分:0)

C中,在指针的帮助下,按值调用和按地址调用。在那里,您可以通过引用“模拟”其他语言中的调用。

默认情况下,C使用call(pass) by value传递参数。这意味着函数中的代码不能改变用于调用函数的参数。

让我们看看以下例子:

#include <stdio.h>

void foo( int x );


int main( void ){
    int x = 5;

    foo(x);

    printf("X = %d\n", x);
}

void foo( int x ){
    x = 10;
}

输出为5

如果您使用设置已打开的良好编译器,您将看到此类警告:

program.c:14:15: error: parameter ‘x’ set but not used [-Werror=unused-but-set-parameter]
 void foo( int x ){
               ^

现在刚刚发生了什么? 根据定义,按值调用(传递)意味着您在内存中复制传入的实际参数值,即实际参数内容的副本。

如果你真的需要修改一个值,你需要传递该变量的地址并使用指针指向它:

#include <stdio.h>

void foo( int *x );


int main( void ){
    int x = 5;

    foo(&x);

    printf("X = %d\n", x);
}

void foo( int *x ){
    *x = 10;
}

现在输出将为10