我有一个名为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){
}
答案 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。