Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
148 / 118 / 37
Регистрация: 27.10.2011
Сообщений: 690

Не могу что-то понять с указателями

24.11.2012, 13:00. Показов 849. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Объясните мне,пожалуйста, почему когда я пишу так:

C++
1
2
3
4
5
6
7
8
9
10
11
void main()
{
    char arr[]="erbb45";
    char *parr = &arr[0];
 
    cout << hex;
    cout << &parr << " ";
    cout << &arr;
 
    system("PAUSE");
}
То на выходе получаю разные адреса (со смещением 4 байта). Ведь в си++ массив представлен как бы адресом его первого элемента. Т.е. &arr = &arr[0] . Я вывожу адрес parr, т.е. адрес &arr[0] (char *parr = &arr[0]). И затем вывожу &arr(т.е. тот же самый &arr[0]). Или я чего-то не понимаю?

И еще. Почему когда я пишу

C++
1
cout << &arr[0]
То получаю "erbb45" т.е. сам массив? & - это же раскрытие адреса
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.11.2012, 13:00
Ответы с готовыми решениями:

Не могу понять, что означает данная операция с указателями
вот такой код #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int rrr2 (int **p) {return ((**p-1)***p);}; ...

Не могу понять, почему программа работает неправильно( Знаю, что где-то ошибки, но не могу найти
{Ввести последовательность натуральных чисел Aj j=1...n (n&lt;=1000). Упорядочить последовательность по неубыванию наименььшей цифры...

Не могу найти ошибку в main. Думаю, что то напортачил с указателями. Заранее Спасибо
/* * Для составления цепочек используются разноцветные бусины: * темные – синяя (С), зеленая (3) и светлые – желтая (Ж), белая (Б),...

8
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
24.11.2012, 13:07
Все логично.
&parr и &arr - адреса самих указателей. Поскольку это две разные переменные, то и их адреса будут различны. Размер указателя на 32-битных системах как раз 4 байта, это смещение Вы и получаете.
Адрес же массива хранится в указателе и совпадает с адресом нулевого элемента. Т.е. arr == &arr[0].
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
24.11.2012, 13:34
что ты присвоил то и будет одинаковым. Ты присвоил parr значение &arr[0]
Вот и выводи cout<<parr, cout<<&arr[0] если хочешь видеть одинаковые значения
0
148 / 118 / 37
Регистрация: 27.10.2011
Сообщений: 690
24.11.2012, 13:36  [ТС]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
что ты присвоил то и будет одинаковым. Ты присвоил parr значение &arr[0]
cout<<&arr[0]
Я ж говорю если я пишу cout<<&arr[0] мне на выход отдаётся весь массив (т.е. "erbb45")
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
24.11.2012, 13:37
Nikitko_Cent, с чего такой вывод? В данном случае &arr[0] означает ровно то, что записано - адрес нулевого элемента. Он же хранится в переменной arr.

Upd: я идиот, сорри)
0
148 / 118 / 37
Регистрация: 27.10.2011
Сообщений: 690
24.11.2012, 13:41  [ТС]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Вот и выводи cout<<parr
И так когда пишу тоже отдаёт "erbb45"
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
24.11.2012, 13:44
Цитата Сообщение от Nikitko_Cent Посмотреть сообщение
Я ж говорю если я пишу cout<<&arr[0] мне на выход отдаётся весь массив (т.е. "erbb45")
Ну да, указатель на нулевой(и вообще) символ интерпретируется как строка. Не знаю как через cout вывести,
но printf выведет эти указатели так
C++
1
printf("%p %p", &arr[0], parr);
1
148 / 118 / 37
Регистрация: 27.10.2011
Сообщений: 690
24.11.2012, 13:48  [ТС]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Ну да, указатель на нулевой(и вообще) символ интерпретируется как строка. Не знаю как через cout вывести,
но printf выведет эти указатели так
C++
1
printf("%p %p", &arr[0], parr);
О_о оказывается, между cout и printf есть различия...видимо, намучаюсь я с изучением плюсов .

Спасибо всем за помощь
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
24.11.2012, 13:51
Nikitko_Cent, ну тут дело в том, что у оператора<< есть функция, которая принимает const char*, вызвается как раз она http://www.cplusplus.com/refer... tor%3C%3C/
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.11.2012, 13:51
Помогаю со студенческими работами здесь

Не могу понять на что способен sort, и что делает его компаратор
Недавно мой знакомый рассказывал что-то про sort,говорил что с помощью него можно сортировать как хочешь и что хочешь,с сортировкой qSort и...

Что-то напутано с настройками ноута, не могу понять что
Доброго времени суток, коллеги. Нужна ваша посильная помощь по вопросу диагностики неполадки устройства. &quot;Пациент&quot; - ноутбук ASUS...

Есть папка с файлами, происхождение аля что-то microsoft, не могу понять что это такое
Здравствуйте, я занимаюсь веб разработкой, и не шарю в том, что у меня сейчас на руках. Суть в том, что у меня есть папка с файлами,...

Я не могу понять что делает данная программа. Точнее что делают функции используемые в это коде
#include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;ctime&gt; using namespace std; int g(int a, int n); int s(int a, int n); int...

Что-то грузит ноутбук, но не могу понять что
И скажите,что нужно прислать.


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
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