Обмен элементов двух разных массивов в C без использования временной переменной - PullRequest
0 голосов
/ 10 августа 2011

у меня есть два массива say int array1 [6] = {2, 4, 5, 7, 9}; & int array2 [6] = {0, 5, 6, 7, 3}

Я передам их функции подкачки (массив1, массив2)

Я сейчас пытаюсь сделать это, как показано ниже

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 ]

3 голосов
/ 10 августа 2011

Условие while неверно, и вы можете ввести меньше.

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

Или вы можете использовать временную переменную, как указано в этом C FAQ .

1 голос
/ 12 августа 2011

Просто измените условие следующим образом,

index =0;
while(array1[index] != NULL  && array2[index] != NULL)
{
    array1[index] ^= array2[index];
    array1[index] ^= array2[index];
    array1[index] ^= array2[index]; 
    index++;
}
1 голос
/ 10 августа 2011

исправьте условие while, и вы можете использовать цикл 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];
}
1 голос
/ 10 августа 2011

array2[index] != NULL неверно - это вообще не указатель, и вы сравниваете его со значением указателя.Кроме того, array1[index] не является правильным в качестве теста - он может быть ложным, только если массив содержит ноль в некоторой позиции, в противном случае вы имеете дело с неопределенным поведением, как только вы пройдете выделенную область.

Вы должны пройтидлина массивов для функции, а затем условие цикла while должно составлять index < length.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...