consts ограничены числами и строками в C#, потому что компилятор заменяет переменную литеральным значением в MSIL. Другими словами, когда Вы пишете:
const string myName = "Bruce Wayne";
if (someVar == myName)
{
...
}
на самом деле рассматривается как
if (someVar == "Bruce Wayne")
{
...
}
и да, компилятор C# достаточно умен для обработки оператора равенства (==) на строках как
string1.Equals(string2)
Ненавижу портить это, но это больше всего похоже на опечатку.
В вашей функции подкачки:
*ary = temp;
должно быть:
*(ary + 1) = temp;
edit: Есть причина, по которой вы не использует обозначение массива? Я думаю, что для таких вещей немного понятнее:
int temp = ary[0];
ary[0] = ary[1];
ary[1] = temp;
Внимательно изучите функцию подкачки:
void swap( int ary[] )
{
int temp = *ary;
*ary = *(ary + 1);
*ary = temp;
}
Когда * (ary + 1)
назначается для ?
Вы перемещаете второе значение в первую позицию, а затем перемещаете первое значение обратно в первую позицию.
Попробуйте вместо этого:
void swap( int ary[] )
{
int temp = ary[0];
ary[0] = ary[1];
ary[1] = temp;
}
просто для развлечения; Также возможен обмен местами без использования временного значения
void swap( int ary[] )
{
*ary ^= *(ary + 1);
*(ary + 1) ^= *ary;
*ary ^= *(ary + 1);
}
. Как указывает GMan, этот код скрывает ваше намерение от компилятора и процессора, поэтому производительность может быть хуже, чем при использовании временной переменной, особенно на современных процессорах.
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] )
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]);