Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Astroz
1 / 1 / 1
Регистрация: 07.11.2014
Сообщений: 36
#1

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

15.03.2015, 02:40. Просмотров 272. Ответов 7
Метки нет (Все метки)

Доброго всем времени суток!
Не понимаю почему указатели на строки возвращают всю строку char может содержать только один символ в отличие от строкового.если предположить что указатель является массивом с C строкой, то логично было бы выполнять каждый раз итерацию по массиву и возвращать по символу но char* и const char * соответственно возвращают всю строку. Может кто-нибудь чайника вразумить?)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2015, 02:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатели на строки (C++):

Указатели.Строки и указатели - C++
Вот условия ввода строки:Вводить и обрабатывать строки в цикле до тех пор пока первый символ не пробел Условия обработки строки: ...

Указатели и указатели на указатели, а также типы данных - C++
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно. Накачал литературы, буду изучать) Щас...

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

Указатели и строки - C++
1. В коде есть такой кусок: sc = stack.pop(); printf("#%s %d#", &sc, sc); sc имеет тип unsigned int, понятно что там хранится...

Указатели и строки - C++
Здравствуйте! Помогите решить такую задачу Найти в строке последовательности , состоящие из одного повтопяющегося символа, и заменить его...

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

7
Croessmah
Пришел
Эксперт CЭксперт С++
13734 / 7813 / 888
Регистрация: 27.09.2012
Сообщений: 19,196
Записей в блоге: 3
Завершенные тесты: 1
15.03.2015, 03:34 #2
Цитата Сообщение от Astroz Посмотреть сообщение
Может кто-нибудь чайника вразумить?)
В указателе "содержится" адрес памяти, где лежать эти символы.
0
Verevkin
165 / 214 / 48
Регистрация: 12.03.2015
Сообщений: 1,806
15.03.2015, 03:51 #3
Цитата Сообщение от Croessmah Посмотреть сообщение
В указателе "содержится" адрес памяти, где лежать эти символы.
почему в кавычках? В указателе содержится адрес ячейки памяти, в которой расположен 0-й символ строки.
Цитата Сообщение от Astroz Посмотреть сообщение
char* и const char * соответственно возвращают всю строку
возвращается именно указатель на символ. разыменованием переменной-указателя получишь сам символ.
0
Astroz
1 / 1 / 1
Регистрация: 07.11.2014
Сообщений: 36
15.03.2015, 03:58  [ТС] #4
Croessmah, да окей, я это понял из практики, но есть противоречие внутренне)Ведь char - это 1 символ и насколько мне известно что указатель должен соответствовать типу т.е. в char мы int не поставим, а когда вижу char* blahblah="trololo", то я понимаю это как массив с нуль строкой и чтобы его обойти надо выполнить итерации но при выводе blahblah всё окей и без циклов разных. все перечитал по моему нигде ничего не упускал.
0
DrOffset
7504 / 4500 / 1023
Регистрация: 30.01.2014
Сообщений: 7,362
15.03.2015, 04:00 #5
Цитата Сообщение от Astroz Посмотреть сообщение
логично было бы выполнять каждый раз итерацию по массиву и возвращать по символу но char* и const char * соответственно возвращают всю строку.
Это ты по выводу на экран судишь?
Ну так этот цикл по массиву, про который ты писал, есть внутри операций вывода на экран, вот и все. Это возможно, потому что С-строки заканчиваются нулем (нуль-символ, '\0'), соответственно зная это и зная адрес начала памяти, можно выполнить "просмотр" всей строки. Это небольшая такая абстракция.
0
Astroz
1 / 1 / 1
Регистрация: 07.11.2014
Сообщений: 36
15.03.2015, 04:08  [ТС] #6
DrOffset, т.е. вы имеете ввиду что операторы вывода сами берутся за вычисление полного адреса?
0
DrOffset
7504 / 4500 / 1023
Регистрация: 30.01.2014
Сообщений: 7,362
15.03.2015, 04:12 #7
Цитата Сообщение от Astroz Посмотреть сообщение
а когда вижу char* blahblah="trololo", то я понимаю это как массив с нуль строкой
Надо понимать это как константный массив с нуль строкой, приведенный (посредством запрещенного, вообще говоря, приведения неявного снятия константности) к указателю на неконстантный char. Указатель просто содержит некий адрес. Т.е. если у нас потерян контекст того, что это был массив, то, имея лишь указатель, мы в общем случае никак не восстановим ни размерность, ни сам факт наличия там массива. Но обычно подразумевается, что если у нас char*, то он указывает на последовательность с нуль-символом в конце. Поэтому стандартный вывод закладывается на это поведение и выполняет просмотр всей строки. Если ты решишь его обмануть, например так:
C++
1
2
3
char a = 'a';
char * p = &a;
printf("%s\n", p);
то получишь непредсказуемый результат. Тоже самое касается "строк", у которых нуль-символ в конце отсутствует. Так ситуация с интерпретацией указателя на char таким образом - это просто условность, которая обычно соблюдается.

Добавлено через 1 минуту
Цитата Сообщение от Astroz Посмотреть сообщение
вы имеете ввиду что операторы вывода сами берутся за вычисление полного адреса?
Что еще за полный адрес?
Они берутся за вывод всех символов из массива, на первый элемент которого указывает наш указатель. У каждого элемента свой адрес, естественно.
1
Astroz
1 / 1 / 1
Регистрация: 07.11.2014
Сообщений: 36
15.03.2015, 04:17  [ТС] #8
DrOffset, да, знал что к "полному" адресу придирки будут)) ну я имел ввиду объем памяти занимаемый этим массивом к.с-н.с.Спасибо тебе-теперь буду чуть спокойней спать)
0
15.03.2015, 04:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2015, 04:17
Привет! Вот еще темы с ответами:

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

указатели и строки? - C++
Люди помогите понять, ни как не дается это страшное слово указатель. Так в общем немного ясно, не понятно вот что: Считается что эти...

Строки и указатели........ - C++
Помогите написать прогу с помощью которой - вводится имя,фамилия,отчество а вывоится фамилия и инициалы то есть - Пушкин Александр...

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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