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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
nulpatrol
0 / 0 / 0
Регистрация: 19.10.2013
Сообщений: 16
#1

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

19.10.2013, 10:48. Просмотров 268. Ответов 2
Метки нет (Все метки)

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++
1. С клавиатуры вводится полный путь к файлу. Напишите программу, которая выделяет из этой строки имя файла Пример: ...

Указатели на строки - C++
Доброго всем времени суток! Не понимаю почему указатели на строки возвращают всю строку char может содержать только один символ в...

Указатели на строки - C++
Есть следующий код: class Strings // класс с указателями на строки (размер которого равен 8) { public: char* str1; ...

Указатели и строки - C++
Здравствуйте. Учу указатели (и строки); появилась куча неясных мне моментов, поэтому прошу разъяснения. 1) const char* obj...

Строки и указатели - C++
Выполнить задание двумя способами используя индексы и используя указатели при работе со строками. Удалить в строке все буквы “b”,...

Строки, указатели и адреса - C++
есть код { char *str="Welcome"; cout<<str<<" "<<(void *)str<<" "<<&str<<endl; for (int i=0;i<8;i++) { cout<<str<<" /...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Спасибо, разобрался. Запомню на будущее
Ответ Создать тему
Опции темы

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