|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
02.08.2013, 11:58 | #1 |
Новичок
Джуниор
Регистрация: 02.08.2013
Сообщений: 2
|
Подскажите, пожалуйста
Доброго времени суток!
Ниже дан код программы. Подскажите, пожалуйста: 1) reverse(char *s) - здесь в качестве формального аргумента выступает символьный указатель, а ниже reverse(s+1) - почему у s нет знака (*) ? 2) Правильно ли я понимаю: char str[] - массив символов, заполненный символами строки "Это текст", а значит, при вызове функции reverse(str) в качестве аргумента передаётся начало массива, следовательно запись reverse(s+1) означает str[s+1], то есть следующий символ? 3) запись if(*s) означает, что если указатель указывает на символ (то есть не на нулевое значение), то возвращается значение ИСТИНА, и выполняются дальнейшие команды? Как тогда трактуется пробел (между словами "это" и "текст") - как символ пробела или как конец строки "это" ? #include <iostream> using namespace std; void reverse(char *s); int main { char str[] = "Это текст"; reverse(str); return 0; } void reverse(char *s) { if(*s) reverse(s+1); else return; cout << *s; } |
02.08.2013, 12:10 | #2 |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
пробел - это пробел (вроде бы символ 32).
конец строки - это конец строки (строки кончаются нуль-символом) знак * - это операция разыменовывания, почитай про это слово если s - указатель на массив (читай, указатель на первый элемент), то s+0 - указатель на первый элемент, s+1 - на второй, s+2 - на третий и т.п. *s+1 - тоже самое что (*s)+1 - смотри приоритеты операций - тут ты получаешь значение первого элемента массива, увеличенное не единицу. |
02.08.2013, 16:22 | #3 |
Новичок
Джуниор
Регистрация: 02.08.2013
Сообщений: 2
|
У меня в голове никак не укладывается работа с указателями. Не знаю почему.
Получается, когда я пишу *s, то я обращаюсь к значению, которое находится по адресу данного указателя(внутри ячейки памяти), а когда я пишу s, то я обращаюсь к ячейке памяти, куда ссылается указатель (а не к значению этой ячейки), правильно? "пробел - это пробел (вроде бы символ 32). конец строки - это конец строки (строки кончаются нуль-символом) знак * - это операция разыменовывания, почитай про это слово если s - указатель на массив (читай, указатель на первый элемент), то s+0 - указатель на первый элемент, s+1 - на второй, s+2 - на третий и т.п. *s+1 - тоже самое что (*s)+1 - смотри приоритеты операций - тут ты получаешь значение первого элемента массива, увеличенное не единицу. __________________ ICQ 395-546-218 мой скромный блог" |
02.08.2013, 17:23 | #4 | |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Цитата:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Подскажите пожалуйста! | kiberzem | Помощь студентам | 2 | 18.02.2014 22:23 |
подскажите пожалуйста | pinch000 | Общие вопросы C/C++ | 1 | 15.11.2009 00:10 |
Подскажите пожалуйста | МаксMorfey | Общие вопросы по Java, Java SE, Kotlin | 1 | 11.10.2009 22:13 |
--==подскажите пожалуйста==-- | HAMMAN | Помощь студентам | 3 | 20.01.2007 20:50 |
подскажите, пожалуйста, | Lena2 | Microsoft Office Excel | 2 | 03.11.2006 17:38 |