Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Astroz
1 / 1 / 1
Регистрация: 07.11.2014
Сообщений: 36
#1

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

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

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

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

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

Указатели и строки
Здравствуйте. Учу указатели (и строки); появилась куча неясных мне моментов,...

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

Строки и указатели
Выполнить задание двумя способами используя индексы и используя указатели при...

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

7
Croessmah
++Ͻ
14161 / 8086 / 1513
Регистрация: 27.09.2012
Сообщений: 19,926
Записей в блоге: 3
Завершенные тесты: 1
15.03.2015, 03:34 #2
Цитата Сообщение от Astroz Посмотреть сообщение
Может кто-нибудь чайника вразумить?)
В указателе "содержится" адрес памяти, где лежать эти символы.
0
Verevkin
584 / 316 / 91
Регистрация: 12.03.2015
Сообщений: 2,449
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
7518 / 4514 / 1097
Регистрация: 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
7518 / 4514 / 1097
Регистрация: 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
Привет! Вот еще темы с решениями:

указатели и строки?
Люди помогите понять, ни как не дается это страшное слово указатель. Так в...

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

Указатели на строки
Есть следующий код: class Strings // класс с указателями на строки (размер...

Указатели и строки
1. В коде есть такой кусок: sc = stack.pop(); printf("#%s %d#", &sc, sc); ...


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

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

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