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

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

Войти
Регистрация
Восстановить пароль
 
Nikitko_Cent
136 / 106 / 10
Регистрация: 27.10.2011
Сообщений: 660
Завершенные тесты: 2
#1

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

24.11.2012, 13:00. Просмотров 409. Ответов 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" т.е. сам массив? & - это же раскрытие адреса
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2012, 13:00     Не могу что-то понять с указателями
Посмотрите здесь:

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

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

не могу понять что не так((((( - 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 ...

Не могу понять, что такое void? - C++
Господа, подскажите пожалуйста глупому, что значит void? Например: void function1(void); Что делает первый и второй void? Заранее...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,011
24.11.2012, 13:07     Не могу что-то понять с указателями #2
Все логично.
&parr и &arr - адреса самих указателей. Поскольку это две разные переменные, то и их адреса будут различны. Размер указателя на 32-битных системах как раз 4 байта, это смещение Вы и получаете.
Адрес же массива хранится в указателе и совпадает с адресом нулевого элемента. Т.е. arr == &arr[0].
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
24.11.2012, 13:34     Не могу что-то понять с указателями #3
что ты присвоил то и будет одинаковым. Ты присвоил parr значение &arr[0]
Вот и выводи cout<<parr, cout<<&arr[0] если хочешь видеть одинаковые значения
Nikitko_Cent
136 / 106 / 10
Регистрация: 27.10.2011
Сообщений: 660
Завершенные тесты: 2
24.11.2012, 13:36  [ТС]     Не могу что-то понять с указателями #4
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
что ты присвоил то и будет одинаковым. Ты присвоил parr значение &arr[0]
cout<<&arr[0]
Я ж говорю если я пишу cout<<&arr[0] мне на выход отдаётся весь массив (т.е. "erbb45")
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,011
24.11.2012, 13:37     Не могу что-то понять с указателями #5
Nikitko_Cent, с чего такой вывод? В данном случае &arr[0] означает ровно то, что записано - адрес нулевого элемента. Он же хранится в переменной arr.

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

Спасибо всем за помощь
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2012, 13:51     Не могу что-то понять с указателями
Еще ссылки по теме:

Не могу понять, что это значит: while(i<10/2) - C++
/*обращение массива*/ #include &lt;stdio.h&gt; main() { int p,i=0; static a={10,11,12,13,14, 15,16,17,18,19}; while(i&lt;10/2) { ...

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

Обьясните что не так не могу понять - C++
программа должна менять цвет bmp файла но при запуске выдает ошибку что 2 неразрешимых внешних элемента есть и все я пробовал разобраться...

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


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

Или воспользуйтесь поиском по форуму:
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,011
24.11.2012, 13:51     Не могу что-то понять с указателями #9
Nikitko_Cent, ну тут дело в том, что у оператора<< есть функция, которая принимает const char*, вызвается как раз она http://www.cplusplus.com/reference/i...perator%3C%3C/
Yandex
Объявления
24.11.2012, 13:51     Не могу что-то понять с указателями
Ответ Создать тему
Опции темы

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