Форум программистов, компьютерный форум CyberForum.ru

Указатели и строки - C++

Восстановить пароль Регистрация
 
nulpatrol
0 / 0 / 0
Регистрация: 19.10.2013
Сообщений: 16
19.10.2013, 10:48     Указатели и строки #1
1. В коде есть такой кусок:
C++
1
2
sc = stack.pop();
printf("#%s %d#", &sc, sc);
sc имеет тип unsigned int, понятно что там хранится ASCII код символа. Но почему тогда &sc содержит сам этот символ? Насколько я понимаю, то данная операция возвращает адрес в памяти. Или в данном случае это просто ссылка? Тогда какой смысл содержится в подобном выражении? Это какой-то трюк с приведением типа? Где об этом можно почитать?

2. Есть код:
C++
1
stack.push(*(unsigned int*)res);
Метод push принимает на вход unsigned int, переменная res - это char[4]. Почему не пишут это же без звездочек? Насколько я понял то тут приводят res к типу "указатель на unsigned int", а потом возвращают значение, которое хранится в той ячейке памяти. Правильно ли я думаю, что поскольку res есть указателем на первый элемент строки, то нужно и приводить тип к другому типу указателя, а потом разыменовывать, иначе будет ошибка с приведением указателя на char к unsigned int?

3. Что это вообще за интересный способ превращать строки в unsigned int? Какие плюсы, зачем это делают? Где можно почитать и об этом?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2013, 10:48     Указатели и строки
Посмотрите здесь:

указатели и строки? C++
Строки и указатели C++
C++ Строки и указатели........
Строки и указатели с++ C++
Указатели и строки C++
C++ Указатели на строки
Строки и указатели в C++ C++
C++ Указатели на строки

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
19.10.2013, 11:33     Указатели и строки #2
Начнем с конца. Размер unsigned int - не менее 4 байт, т.е. строка из 4-х символов в него помещается. Такой вот интересный способ. Зачем он нужен - не зная, какие действия производятся с элементами стека, могу только предположить, что кому-то показалось удобнее и нагляднее хранить 3-х буквенные строки в виде целого числа.

Соответственно, чтобы получить из res типа char[4] (он же char*) что-то типа unsigned int, этот res приводится к типу указатель на unsigned int:
C
1
(unsigned int*)res
ну а потом этот указатель разыменовывается (уже как unsgined int):
C
1
*(unsigned int*)res
С printf в обратную сторону: есть sc типа unsigned int, в нем хранятся коды не более 3-х ASCII символов и 0 (по крайней мере, так должно быть). Спецификатор %d печатает все число sc, это понятно. А %s печатает строку по указанному адресу, который интерпретируется как const char*. Указанный адрес - это адрес sc (&sc).
nulpatrol
0 / 0 / 0
Регистрация: 19.10.2013
Сообщений: 16
19.10.2013, 11:41  [ТС]     Указатели и строки #3
Спасибо, разобрался. Запомню на будущее
Yandex
Объявления
19.10.2013, 11:41     Указатели и строки
Ответ Создать тему
Опции темы

Текущее время: 21:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru