2015-02-10 2 views
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); 
} 

im получение большого количества ошибок, говорящих о незаконном направлении, потому что при использовании * он должен быть указателем. Я использую его в других методах, отлично, только тот, у которого есть проблемы. Это вызов im используется.

sort(arraySize, numArray); 

все объявлено и работает другими методами.

+1

, какие строки вы видите сообщения об ошибках? также он, вероятно, должен быть 'ptr [count]', а не '* ptr [count]'. ptr - это указатель, а не массив указателей. –

+0

, что исправил его спасибо! – BucketsOstuff

+0

Итак, измените '* ptr [count]' на просто 'ptr [count]'. Вам не нужно разыгрывать указатель, если вы используете индекс массива. Указатели могут быть разыменованы с помощью оператора * или с индексом массива в большинстве случаев. –

ответ

0

ошибка в *ptr[count] это неправильный синтаксис для разыменования указателя.

ли ptr[count] или *(ptr + count)

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); 
} 
1

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); 
} 
0

Это правильная структура Вы не должны использовать * при использовании указателя нотации массива, использование имени указателя без «*» 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); 
}