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

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

Войти
Регистрация
Восстановить пароль
 
Nikitko_Cent
143 / 113 / 12
Регистрация: 27.10.2011
Сообщений: 681
Завершенные тесты: 3
#1

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

24.11.2012, 13:00. Просмотров 415. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2012, 13:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не могу что-то понять с указателями (C++):

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

не могу понять что не так((((( - C++
привет всем! у меня проблемка возникла компиятор никак не проглатывает мой код #include &lt;iostream&gt; using namespace std; int main() ...

что не верно? не могу понять. - C++
программа должна оборачивать каждое слово в предложении. (например &quot;пришел&quot;, а выведет &quot;леширп&quot;) #include &quot;stdio.h&quot; #include...

не могу понять что с выводом - C++
помогите найти косяк,у меня при отрицательном &quot;a&quot; он выдаёт результат и &quot;error&quot; хотя должен только &quot;error&quot; таже проблема если b=0 a&gt;0 ...

не могу понять что не так - C++
задание такое : Структура &quot;книга почтой&quot;:-наименование книги;-ФИО автора;-номер по каталогу;-издательство;-колличество в...

Не могу понять что делает функциия - C++
map&lt;char,int&gt; next; int &amp;get (char c) { if (!next.count(c)) next = -1; return next; } И можно ли будет заменить его...

8
0x10
2465 / 1637 / 239
Регистрация: 24.11.2012
Сообщений: 4,037
24.11.2012, 13:07 #2
Все логично.
&parr и &arr - адреса самих указателей. Поскольку это две разные переменные, то и их адреса будут различны. Размер указателя на 32-битных системах как раз 4 байта, это смещение Вы и получаете.
Адрес же массива хранится в указателе и совпадает с адресом нулевого элемента. Т.е. arr == &arr[0].
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
24.11.2012, 13:34 #3
что ты присвоил то и будет одинаковым. Ты присвоил parr значение &arr[0]
Вот и выводи cout<<parr, cout<<&arr[0] если хочешь видеть одинаковые значения
0
Nikitko_Cent
143 / 113 / 12
Регистрация: 27.10.2011
Сообщений: 681
Завершенные тесты: 3
24.11.2012, 13:36  [ТС] #4
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
что ты присвоил то и будет одинаковым. Ты присвоил parr значение &arr[0]
cout<<&arr[0]
Я ж говорю если я пишу cout<<&arr[0] мне на выход отдаётся весь массив (т.е. "erbb45")
0
0x10
2465 / 1637 / 239
Регистрация: 24.11.2012
Сообщений: 4,037
24.11.2012, 13:37 #5
Nikitko_Cent, с чего такой вывод? В данном случае &arr[0] означает ровно то, что записано - адрес нулевого элемента. Он же хранится в переменной arr.

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

Спасибо всем за помощь
0
0x10
2465 / 1637 / 239
Регистрация: 24.11.2012
Сообщений: 4,037
24.11.2012, 13:51 #9
Nikitko_Cent, ну тут дело в том, что у оператора<< есть функция, которая принимает const char*, вызвается как раз она http://www.cplusplus.com/reference/i...perator%3C%3C/
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2012, 13:51
Привет! Вот еще темы с ответами:

Не могу понять, что не так в коде - C++
Целый день маюсь с этой прогой и ничё не выходит. #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; int main() { ...

Не могу понять на что ругается компилятор - C++
Задание такое: Нужно написать программу для обработки информации о предлагаемых к продаже автомобилей. Информация включает следующие...

Не могу понять, что неправильно с float - C++
Всем здравствия. Прошу прощения за глупый вопрос, но споткнулся на ровном, и не могу понять, что не так. int vsego = 282; int...

Никак не могу понять что это - C++
#include &lt;iostream&gt; using namespace std; int main() { setlocale(LC_ALL, &quot;rus&quot;); double chocolate, cofe, milk; cout &lt;&lt;...


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

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
24.11.2012, 13:51
Ответ Создать тему
Опции темы

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