Вероятно, это связано с тем, как вы пишете свой цикл. Ваше условие остановки x != y
. Если массив имеет четное количество элементов, это никогда не будет истинным.
Если вы на 100% уверены, что оба указателя будут указывать на элементы в вашем массиве, вы можете сделать это следующим образом:
void swapedints(unsigned int *x, unsigned int *y) {
while (x < y) {
*x ^= *y;
*y ^= *x;
*x ^= *y;
x++;
y--;
}
}
Важно убедиться, что оба параметра x
и y
указывают на элементы вашего массива. В противном случае ваша программа может не работать странным образом . Например, условие x < y
всегда может быть истинным, даже если они указывают на совершенно разные вещи.
Я также очень подозрительно отношусь к вашему примеру для вычисления конца массива. Эта арифметика, которую вы показали нам, имеет мало смысла. Вероятно, вам следует использовать эту функцию следующим образом:
int main(void)
{
int array[6] = {1, 2, 3, 4, 5, 6};
swapedints(array, array + 5);
// print the array
}