在C中切换变量的值

时间:2016-10-20 14:10:34

标签: c

我有一个名为void rotateLeft(int *a, int *b, int *c, int *d)的函数。我想将变量a,b,c和d赋给这个函数。我想调用该函数,然后 a 需要获得 b 的值, d a 的值, c d 的值, b c 的值。我在下面添加了我的主代码,调用函数和rotateLeft函数的代码。我在rotateLeft函数中放置什么才能使它工作?

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


void rotateLeft (int*, int*, int*, int*); 

int main(int argc, char **argv){

    int a,b,c,d,n;

    while( (n = scanf("%d%d%d%d",&a,&b,&c,&d)) == 4)
    {
       rotateLeft(&a,&b,&c,&d); 
       printf("%d %d %d %d\n",a,b,c,d);
    }

}

rotateLeft功能

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

void rotateLeft(int *a, int *b, int *c, int *d){




}

3 个答案:

答案 0 :(得分:2)

以下是交换2个变量的代码。尝试根据您的问题进行调整。

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

答案 1 :(得分:1)

好吧,也许我顽固地期待在问题中有更多的代码。

以下是我将如何解决它:

void rotateLeft(int *a, int *b, int *c, int *d){
  const int tmp = *a;
  *a = *b;
  *b = *c;
  *c = *d;
  *d = tmp; /* Because we've overwritten 'a', use a copy. */
}

非常直截了当,我希望。

答案 2 :(得分:0)

如果您不想为另一个临时变量分配空间(无论出于何种原因),您可以使用XOR运算符交换/旋转值。 XOR运算符有时称为parity function。这比实际应用更有趣。下面代码中的rotate_left函数只使用3个变量,但原理可以应用于任意数量的变量(查看rotate_right函数以查看变量的顺序如何影响输出。)

#include <stdio.h>

void number_swap(int* a, int* b) {
    *a ^= *b;
    *b ^= *a;
    *a ^= *b;
}

void rotate_left(int* a, int* b, int* c) {
    *a ^= *b ^ *c;
    *c ^= *a ^ *b;
    *b ^= *a ^ *c;
    *a ^= *b ^ *c;
}

void rotate_right(int* a, int* b, int* c, int* d) {
    *a ^= *b ^ *c ^ *d;
    *b ^= *a ^ *c ^ *d;
    *c ^= *a ^ *b ^ *d;
    *d ^= *a ^ *b ^ *c;
    *a ^= *b ^ *c ^ *d;
}

int main() {
    int a = 7894;
    int b = 1989;
    printf("a = %d, b = %d\n", a, b);
    number_swap(&a, &b);
    printf("a = %d, b = %d\n", a, b);

    int aa = 5;
    int bb = 8;
    int cc = 3;
    printf("aa = %d, bb = %d, cc = %d\n", aa, bb, cc);
    rotate_left(&aa, &bb, &cc);
    printf("aa = %d, bb = %d, cc = %d\n", aa, bb, cc);

    int aaa = 1;
    int bbb = 3;
    int ccc = 5;
    int ddd = 7;
    printf("aaa = %d, bbb = %d, ccc = %d, ddd = %d\n", aaa, bbb, ccc, ddd);
    rotate_right(&aaa, &bbb, &ccc, &ddd);
    printf("aaa = %d, bbb = %d, ccc = %d, ddd = %d\n", aaa, bbb, ccc, ddd);

    return 0;
}

这会产生以下输出:

a = 7894, b = 1989
a = 1989, b = 7894
aa = 5, bb = 8, cc = 3
aa = 8, bb = 3, cc = 5
aaa = 1, bbb = 3, ccc = 5, ddd = 7
aaa = 7, bbb = 1, ccc = 3, ddd = 5

您可以运行此示例here

您可以详细了解XOR交换算法的工作原理here