Используя указатели для свопинга интервала выстраивают значения

consts ограничены числами и строками в C#, потому что компилятор заменяет переменную литеральным значением в MSIL. Другими словами, когда Вы пишете:

const string myName = "Bruce Wayne";
if (someVar == myName)
{
   ...
}

на самом деле рассматривается как

if (someVar == "Bruce Wayne")
{
   ...
}

и да, компилятор C# достаточно умен для обработки оператора равенства (==) на строках как

string1.Equals(string2)
6
задан Josh Curren 3 November 2009 в 23:26
поделиться

7 ответов

Ненавижу портить это, но это больше всего похоже на опечатку.

В вашей функции подкачки:

*ary = temp;

должно быть:

*(ary + 1) = temp;

edit: Есть причина, по которой вы не использует обозначение массива? Я думаю, что для таких вещей немного понятнее:

int temp = ary[0];
ary[0] = ary[1];
ary[1] = temp;
18
ответ дан 8 December 2019 в 02:40
поделиться

Внимательно изучите функцию подкачки:

void swap( int ary[] )
{
    int temp = *ary;
    *ary = *(ary + 1);
    *ary = temp;
}

Когда * (ary + 1) назначается для ?

6
ответ дан 8 December 2019 в 02:40
поделиться

Вы перемещаете второе значение в первую позицию, а затем перемещаете первое значение обратно в первую позицию.

4
ответ дан 8 December 2019 в 02:40
поделиться

Попробуйте вместо этого:

void swap( int ary[] )
{
    int temp = ary[0];
    ary[0] = ary[1];
    ary[1] = temp;
}
0
ответ дан 8 December 2019 в 02:40
поделиться

просто для развлечения; Также возможен обмен местами без использования временного значения

void swap( int ary[] )
{
    *ary ^= *(ary + 1);
    *(ary + 1) ^= *ary;
    *ary ^= *(ary + 1);
}

. Как указывает GMan, этот код скрывает ваше намерение от компилятора и процессора, поэтому производительность может быть хуже, чем при использовании временной переменной, особенно на современных процессорах.

4
ответ дан 8 December 2019 в 02:40
поделиться

your swap function will work only for 2-ints array, so show it to your compiler (it won't change anything, but make code cleaner)

void swap( int ary[2] )
0
ответ дан 8 December 2019 в 02:40
поделиться

You can also swap the values without any temporary variable:

void swap(int *x, int *y)
{
   *x ^= *y;
   *y ^= *x;
   *x ^= *y;
}

then call:

swap(&ary[0], &ary[1]);
2
ответ дан 8 December 2019 в 02:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: