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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.08.2013, 11:58   #1
sanri
Новичок
Джуниор
 
Регистрация: 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;
}
sanri вне форума Ответить с цитированием
Старый 02.08.2013, 12:10   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

пробел - это пробел (вроде бы символ 32).
конец строки - это конец строки (строки кончаются нуль-символом)

знак * - это операция разыменовывания, почитай про это слово

если s - указатель на массив (читай, указатель на первый элемент), то s+0 - указатель на первый элемент, s+1 - на второй, s+2 - на третий и т.п.
*s+1 - тоже самое что (*s)+1 - смотри приоритеты операций - тут ты получаешь значение первого элемента массива, увеличенное не единицу.
rrrFer вне форума Ответить с цитированием
Старый 02.08.2013, 16:22   #3
sanri
Новичок
Джуниор
 
Регистрация: 02.08.2013
Сообщений: 2
По умолчанию

У меня в голове никак не укладывается работа с указателями. Не знаю почему.
Получается, когда я пишу *s, то я обращаюсь к значению, которое находится по
адресу данного указателя(внутри ячейки памяти), а когда я пишу s, то я
обращаюсь к ячейке памяти, куда ссылается указатель (а не к значению этой
ячейки), правильно?

"пробел - это пробел (вроде бы символ 32).
конец строки - это конец строки (строки кончаются нуль-символом)

знак * - это операция разыменовывания, почитай про это слово

если s - указатель на массив (читай, указатель на первый элемент), то s+0 - указатель на первый элемент, s+1 - на второй, s+2 - на третий и т.п.
*s+1 - тоже самое что (*s)+1 - смотри приоритеты операций - тут ты получаешь значение первого элемента массива, увеличенное не единицу.
__________________
ICQ 395-546-218
мой скромный блог"
sanri вне форума Ответить с цитированием
Старый 02.08.2013, 17:23   #4
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
правильно?
примерно так
rrrFer вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите пожалуйста! 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