我有两个数组说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语言做这件事。
由于
答案 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++;
}