Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2021, 22:44   #1
Roberttt
Пользователь
 
Регистрация: 30.05.2018
Сообщений: 56
По умолчанию Const-указатели в СИ

Здравствуйте! Помогите, пожалуйста, разобраться в const-указателях. При компиляции появляются ошибки типа "assignment discards ‘const’ qualifier from pointer target type", но ведь я работаю только с адресами, а не со значениями, поэтому непонятно откуда вообще ошибки связанные с "const".

Код:
struct list {
  int64_t value;
  struct list* next;
};

struct list* list_reverse( const struct list* list ) {
    size_t size =  list_length( list );
    
    if ( size != 0 ) {
         struct list* list_first = list;
         while ( size != 0 ) {
             struct list* last = list_last( list );
             last->next = list;
             list_first = last;
             size -= 1;
         }
        return list_first;
    }
    else return NULL;
}
size_t list_length( const struct list* l ) - считает количество элементов в списке
struct list* list_last( struct list * list ) - возвращает адрес последнего элемента в списке

Последний раз редактировалось Roberttt; 28.07.2021 в 00:46.
Roberttt вне форума Ответить с цитированием
Старый 28.07.2021, 08:39   #2
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

Цитата:
Сообщение от Roberttt Посмотреть сообщение
struct list* list_reverse( const struct list* list )
этот const убери

Цитата:
Сообщение от Roberttt Посмотреть сообщение
но ведь я работаю только с адресами, а не со значениями
ну а как же изменения поля экземпляра класса ?
Цитата:
last->next = list;
Алексей1153 вне форума Ответить с цитированием
Старый 28.07.2021, 15:07   #3
Roberttt
Пользователь
 
Регистрация: 30.05.2018
Сообщений: 56
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
этот const убери
К сожалению, дана функция "list_reverse" принимает const-указатель, поэтому и возникли проблемы с этими const-указателями.
Дана одна функция, которая создает новый элемент списка и привязывает указатель на бывший первый элемент списка к новому первому элементу, а во второе поле созданного элемента закидывает указатель на старый первый элемент. Этой функцией является
Код:
void list_add_front( struct list** old, int64_t value ) {
    struct list* mylist = node_create( value );
    mylist->next = *old;
    *old = mylist;
}
Но я решил не разрушать весь список и создавать новый с зеркальными элементами, а просто найти последний элемент списка, вернув его указатель, и переместить найденный элемент в начало списка, но возникли проблемы с const-указателями.
Roberttt вне форума Ответить с цитированием
Старый 28.07.2021, 15:28   #4
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

Цитата:
Сообщение от Roberttt Посмотреть сообщение
функция "list_reverse" принимает const-указатель
ну, так что мешает это исправить ?
Алексей1153 вне форума Ответить с цитированием
Старый 28.07.2021, 17:32   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
ну, так что мешает это исправить ?
Думаю, что прототип функции уже задан, а реализовать предлагается тело функции. Предположу, что предлагается по списку-аргументу построить и вернуть новый список с элементами в обратном порядке.
Roberttt, по поводу выбранного способа получения "зеркального" списка - если брать последний элемент списка и "перевешивать" в начало, повторяя это действие столько раз, сколько элементов в списке, то получится тот же список.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 28.07.2021, 18:21   #6
Roberttt
Пользователь
 
Регистрация: 30.05.2018
Сообщений: 56
По умолчанию

Спасибо за разъяснения. А то мне казалось, что я нашел хорошее решение задачки.
Roberttt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Const TBitMap Kronos913 Общие вопросы Delphi 2 18.04.2021 02:43
Указатели - надо начальную букву в слове сделать большой используя указатели FerrariF70 Общие вопросы C/C++ 13 08.09.2017 04:28
С++ Преобразование const Char в const GUID Decoy2k Общие вопросы C/C++ 9 07.02.2012 14:02
изменение const zander Microsoft Office Excel 1 13.05.2009 09:12
[C] массивы, указатели, двойные указатели. Iggel Общие вопросы C/C++ 5 05.05.2009 12:39