在C中交换两个不同数组的元素而不使用临时变量

时间:2011-08-10 07:31:16

标签: c arrays

我有两个数组说int array1 [6] = {2,4,5,7,9}; &安培; int array2 [6] = {0,5,6,7,3}

我将这些传递给函数交换(array1,array2)

我目前正在尝试按以下方式执行此操作

index =0;
while(array1[index] && array2[index] != NULL)
{
    array1[index] = array1[index] ^ array2[index];
    array2[index] = array1[index] ^ array2[index];
    array1[index] = array1[index] ^ array2[index]; 
    index++;
}

我的方法是否正确?请让我知道您的观点

PS:我不能将数组长度作为参数发送给函数。我想用C语言做这件事。

由于

4 个答案:

答案 0 :(得分:3)

while条件错误,您可以输入更少。

for (index = 0; index < len; index++) {
    array1[index] ^= array2[index];
    array2[index] ^= array1[index];
    array1[index] ^= array2[index];
}

或者您可以使用此C FAQ指示的临时变量。

答案 1 :(得分:1)

array2[index] != NULL是错误的 - 它根本不是指针,而是将它与指针值进行比较。 array1[index]也不是正确的测试 - 如果数组在某个位置包含零,则它只能为假,否则一旦超过分配区域就处理未定义的行为。

您应该将数组的长度传递给函数,然后while循环的条件应为index < length

答案 2 :(得分:1)

纠正你的状态,你可以使用while循环

index = len;
while( index-- ) {
    array1[index] ^= array2[index];
    array2[index] ^= array1[index];
    array1[index] ^= array2[index];
}

或直接使用您的长度信息

while( len-- ) {
    array1[len] ^= array2[len];
    array2[len] ^= array1[len];
    array1[len] ^= array2[len];
}

答案 3 :(得分:1)

只需改变那样的条件,

index =0;
while(array1[index] != NULL  && array2[index] != NULL)
{
    array1[index] ^= array2[index];
    array1[index] ^= array2[index];
    array1[index] ^= array2[index]; 
    index++;
}
相关问题