Использование указателя для сортировки выбора
Я пытаюсь использовать указатель на массив для выбора сортировки.
void sort(int size, int *ptr)
{
int temp;
bool swap;
do
{
swap = false;
for (int count = 0; count < (size - 1); count++)
{
if (*ptr[count] > *ptr[count + 1])
{
temp = *ptr[count];
*ptr[count] = *ptr[count + 1];
*ptr[count + 1] = temp;
swap = true;
}
}
} while (swap);
}
Я получаю много ошибок, говоря неправильное направление, потому что при использовании * это должен быть указатель. Я использую это в других методах, хорошо, только у этого есть проблема. Это звонок, который я использую.
sort(arraySize, numArray);
все заявлено и работает другими способами.
5 ответов
Использование ptr[]
вместо *ptr[]
так как,ptr
указатель и если используется с []
затем он возвращает элемент в этом месте, как это делает массив.
void sort(int size, int *ptr)
{
int temp;
bool swap;
do
{
swap = false;
for (int count = 0; count < (size - 1); count++)
{
if (ptr[count] > ptr[count + 1])
{
temp = ptr[count];
ptr[count] = ptr[count + 1];
ptr[count + 1] = temp;
swap = true;
}
}
} while (swap);
}
Это правильная структура. Вы не должны использовать * при использовании обозначения указателя массива, использование имени указателя без '*' itslef относится к индексу 0 массива указателей
void sort(int size, int *ptr)
{
int temp;
bool swap;
do
{
swap = false;
for (int count = 0; count < (size - 1); count++)
{
if (ptr[count] > ptr[count + 1])
{
temp = ptr[count];
ptr[count] = ptr[count + 1];
ptr[count + 1] = temp;
swap = true;
}
}
} while (swap);
}
Вот ошибки компиляции удаленной версии.
void sort(int size, int *ptr)
{
int temp;
bool swap;
do
{
swap = false;
for (int count = 0; count < (size - 1); count++)
{
if (ptr[count] > ptr[count + 1])
{
temp = ptr[count];
ptr[count] = ptr[count + 1];
ptr[count + 1] = temp;
swap = true;
}
}
} while (swap);
}
Читайте также: C++ Использование указателей для функции выбора сортировки
Дополнительные примеры: http://www.codemiles.com/c-examples/c-selection-sort-t2916.html
*ptr[count]
ничего не значит
ptr
- указатель*ptr
- значение - разыменованный
Ошибка в *ptr[count]
это неправильный синтаксис для разыменования указателя.
Делать ptr[count]
или же *(ptr + count)