Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 25.10.2018
Сообщений: 38

Строковые значения указателей

25.10.2018, 11:41. Показов 1170. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, только что зарегался на вашем форуме потому что очень нужен ответ. Совсем недавно изучаю C++ по книге Лафоре и столкнулся с противоречием: В книге сказано, что указатель это переменная, содержащая в себе значение адреса ячейки памяти (или как-то так), затем встречаю в книге пример со следующей строкой кода:
char* str="какой-то текст";
Мои представления относительно памяти компьютера достаточно смутные, поэтому возникает вопрос: я что-то не так понял или же тут всё-таки есть противоречие? Каким образом в указатель поместили строковую константу? Спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.10.2018, 11:41
Ответы с готовыми решениями:

Замените все четные значения введённого с клавиатуры массива нулями и вывести скорректированные значения (с помощью указателей)
Дорогие форумчане! Помогите пожалуйста с заданием!:cry: Введите с клавиатуры данные в массив целого типа,...

Обменять значения указателей строк
Задача обменять два указателя строк между собой. Например, char *s1="teacher"; char *s2="student" с помощью функции...

Поменять значения адресов двух указателей
Добрый день. Суть программы - поменять первую строку массива с той, в которой встретиться наибольшее значение элемента. Но это не суть...

15
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
25.10.2018, 11:48
Цитата Сообщение от Flame231 Посмотреть сообщение
строковую константу
Цитата Сообщение от Flame231 Посмотреть сообщение
содержащая в себе значение адреса ячейки памяти
Под строковую константу, также выделяется память.
1
 Аватар для Новичок
1682 / 1098 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
25.10.2018, 12:14
Цитата Сообщение от Flame231 Посмотреть сообщение
Каким образом в указатель поместили строковую константу?
В указатель поместили адрес первого(нулевого) символа строки(а уже по этому указателю можно работать со всей строкой, последний символ нулевой для того чтобы знать где конец строки). Строка будет зашита в саму программу(в статической области памяти).
1
0 / 0 / 0
Регистрация: 25.10.2018
Сообщений: 38
25.10.2018, 12:16  [ТС]
Но почему указателю присваивается значение самой константы, а не адреса памяти, где она хранится?
0
 Аватар для Новичок
1682 / 1098 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
25.10.2018, 12:19
https://www.cyberforum.ru/blogs/18334/blog97.html, 4 пункт(хотя статья годная, стоит всю прочитать)

Добавлено через 2 минуты
Возможно еще эта тема поможет, я сам раньше не понимал почему указателю можно присвоить строку и почему не нужно самим выделять память под нее.
0
Злостный нарушитель
 Аватар для Verevkin
10232 / 5661 / 1260
Регистрация: 12.03.2015
Сообщений: 26,239
25.10.2018, 12:20
Цитата Сообщение от Flame231 Посмотреть сообщение
Но почему указателю присваивается значение самой константы, а не адреса памяти, где она хранится?
Это просто синтаксис такой. Компилятор поймёт. Если ты только начал изучение, то это всё цветочки.
Если в программе написано "текст_строки", компайлер бережно выделит под это нужное количество статической памяти + 1 байт. Не парься по этому поводу. Строка - это всегда непрерывный кусок памяти с нулём в конце.
1
0 / 0 / 0
Регистрация: 25.10.2018
Сообщений: 38
25.10.2018, 12:23  [ТС]
То есть компилятор автоматически воспринимает выражение после "=" как адрес памяти, где будет хранится соответствующий текст?
Просто очень сложно осознать почему в указатель записывается текст, интуитивно кажется, что компилятор должен ругаться на несоответствие типов. В книге по которой изучаю, об это ничего не сказано, просто сходу дан пример.
0
Злостный нарушитель
 Аватар для Verevkin
10232 / 5661 / 1260
Регистрация: 12.03.2015
Сообщений: 26,239
25.10.2018, 12:25
Цитата Сообщение от Flame231 Посмотреть сообщение
То есть компилятор автоматически воспринимает выражение после "=" как адрес памяти, где будет хранится соответствующий текст?
Ну, если упрощённо, то да.
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
25.10.2018, 12:33
Flame231, в .rdata segment вроде находятся наши константы, поправьте если ошибаюсь.
0
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
25.10.2018, 12:34
Flame231, не текст, а адрес первого элемента массива, как писал Новичок.
Так будет наглядней:
C++
1
2
3
4
char *str = "text";
std::cout << str << std::endl;
++str;
std::cout << str << std::endl;
0
0 / 0 / 0
Регистрация: 25.10.2018
Сообщений: 38
25.10.2018, 12:34  [ТС]
Есть ещё вопрос: какой смысл ссылки в данном случае?
class Distance
{.......};
int main()
{
Distance& dist=*(new Distance);
}
компилятор и без неё вроде бы код воспринимает.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
25.10.2018, 12:38
Лучший ответ Сообщение было отмечено Flame231 как решение

Решение

Цитата Сообщение от Flame231 Посмотреть сообщение
Но почему указателю присваивается значение самой константы, а не адреса памяти, где она хранится?
Константа имеет тип "массив".
В С и С++ массивы умеют автоматически преобразовываться к указателям.

Добавлено через 57 секунд
Цитата Сообщение от Flame231 Посмотреть сообщение
какой смысл ссылки в данном случае?
Это надо автора кода спрашивать.
0
Злостный нарушитель
 Аватар для Verevkin
10232 / 5661 / 1260
Регистрация: 12.03.2015
Сообщений: 26,239
25.10.2018, 12:39
Цитата Сообщение от Flame231 Посмотреть сообщение
компилятор и без неё вроде бы код воспринимает.
Это значит только то, что прога синтаксически правильно написана. А будет она работать правильно или нет - зависит от аффтара.

Это вызов конструктора класса для инициализации переменной созданным экземпляром. Экземпляры классов могут быть только динамическими объектами.
C++
1
Distance& dist=*(new Distance);
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
25.10.2018, 12:39
Если уж точно наглядней, то, наверное, так:
C++
1
2
3
4
5
static const char ch_literal[] = { 'a', 'b', 'c', '\0' };
//..
char* str = "abc" компилятор заменил бы на &char_literal[0];
std::cout << str << std::endl;
std::cout << str + 1 << std::endl;
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
25.10.2018, 12:40
Цитата Сообщение от Flame231 Посмотреть сообщение
В книге по которой изучаю, об это ничего не сказано, просто сходу дан пример.
Приблизительный аналог этого:
C++
1
2
3
static const char buf[] = "hello";
 
const char * str = buf; // &buf[0]
0
0 / 0 / 0
Регистрация: 25.10.2018
Сообщений: 38
25.10.2018, 12:44  [ТС]
Кажется примерно въехал. Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.10.2018, 12:44
Помогаю со студенческими работами здесь

Как вывести ещё индексы и значения указателей?
Добрый день!Как сделть что везде ещё выводились кроме значений индексы и значения указателей... #include &lt;iostream&gt; #include...

Поменять местами значения 2 переменных с использованием указателей
Здравствуйте, что-то недопонимаю.... # include &lt;iostream&gt; using namespace std; //3.Используя указатели и оператор разыменования, ...

Массив указателей на функции, возвращающие значения разного типа
Подскажите,возможно ли создать массив указателей на функции, которые возвращали бы значения разного типа? Приблизительно хотелось бы...

Надо присвоить значения массива а массиву b с помощю функции, и указателей
Надо присвоить значения массива а массиву b с помощю функции, и указателей... Я написал, но не работет... В чём дело? #include...

Вывести значения всех элементов одномерного массива с помощью указателей
Вывести значения всех элементов одномерного массива с помощью указателей, * в диапазоне от 0 до 9, при этом вместо каждого элемента со...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru