Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Bash_B00M
0 / 0 / 0
Регистрация: 24.12.2015
Сообщений: 14
1

Почему нельзя заменить char на int в коде данной сортировки?

15.02.2018, 17:13. Просмотров 416. Ответов 4
Метки нет (Все метки)

Добрый день, преподаватель задал вопрос, на который, не смотря на понимание сути, не выходит ответить корректно.
Универсальная сортировка(написанная не мною, а данная самим преподавателем вместе с остальными заданиями), используемая как функция, в зависимости от подставленного Compare и Swap, будет происходить сортировка int, double, массива строк и т.д.
Вопрос: почему в строке "char* pCurrent = (int*)pcFirst + j*size;" нельзя заменить char на int? Развернутый ответ, пожалуйста. И по возможности показать в отладчике место где и как что-то происходит "не так".

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void Sort(char* pcFirst, int nNumber, int size,
    void(*Swap)(void*, void*), int(*Compare)(void*, void*))
{
    int i;
    for (i = 1; i < nNumber; i++)
        for (int j = nNumber - 1; j >= i; j--)
        {
            char* pCurrent = (int*)pcFirst + j*size;
            char* pPrevious = pcFirst + (j - 1)*size;
            if ((*Compare)(pPrevious, pCurrent) > 0)  //требуется переставить
                (*Swap)(pPrevious, pCurrent);
        }
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2018, 17:13
Ответы с готовыми решениями:

Почему два char нельзя сравнивать так ==?
Почему два char нельзя сравнивать так ==?

Почему в int main() нельзя вернуть значение больше 255?
Другие любые функции int могут вернуть число больше 255, но не в случае main(), по крайней мере в...

Почему функцию sqrt нельзя применять к int переменным, а только к double и flot?
Почему функцию sqrt нельзя применять к int переменным, а только к double и float? Извините за...

Почему нельзя заменить значение
h1 { color:#A83001; font-size:36px; border-bottom:1px solid #741D00; ...

Реализация функции char *padl(const char *string, int len, int c=' ')
Реализовать функцию возвращающую указатель на новую строку длины len, полученную из string либо...

4
MansMI
1457 / 1165 / 551
Регистрация: 08.01.2012
Сообщений: 4,509
15.02.2018, 17:34 2
если int* то всякое к нему +/-n фактически в байтах будет +/-n*sizeof(int)
а изменять нужно на j*size байт

Добавлено через 2 минуты
для примера:
C++
1
2
int a[2];
cout<<a<<"  "<<a+1<<endl;
1
Kastaneda
Jesus loves me
Эксперт С++
5058 / 3076 / 351
Регистрация: 12.12.2009
Сообщений: 7,774
Записей в блоге: 2
Завершенные тесты: 1
15.02.2018, 17:41 3
Так как раз в этой строке ошибка, там в оригинале точно к указателю на int приводится? И в целом это выглядит как будто какая-то поломаная сортировка, она вообще сортирует?
0
Bash_B00M
0 / 0 / 0
Регистрация: 24.12.2015
Сообщений: 14
15.02.2018, 17:49  [ТС] 4
Верно, там не должно быть (int*), простите за невнимательность.
В остальном сортировка верная и очень удобная.
Преподаватель заменил "char* pCurrent = pcFirst + j*size;" на "int* pCurrent = (int*)pcFirst + j*size;" и спросил почему это не верно.
Ответ MansMI понят и принят, но хотелось бы чуть больше подробностей.
0
Kastaneda
Jesus loves me
Эксперт С++
5058 / 3076 / 351
Регистрация: 12.12.2009
Сообщений: 7,774
Записей в блоге: 2
Завершенные тесты: 1
15.02.2018, 18:19 5
Цитата Сообщение от Bash_B00M Посмотреть сообщение
сортировка верная
а, я не заметил, что там i не используется как индекс
0
15.02.2018, 18:19
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2018, 18:19

Заменить int числа на char символы в списке
как заменить int числа на char символы в списке, то есть, нужно чтообы список состоял из сисволов,...

Error C2040:strnset_2:"char *(char *,int,unsigned int)" отличается по уровням косвенного обращения от "int ()"
Не могу найти в чём ошибка. error C2040: strnset_2: &quot;char *(char *,int,unsigned int)&quot; отличается...

как осуществить приведение типов....(int) char ; (char) int;
Подскажите пожалуйста. мне нужно перевести программу с билдера на дельфи. Есть некоторые нюансы. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.