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

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

Войти
Регистрация
Восстановить пароль
 
denvasden
4 / 4 / 0
Регистрация: 25.10.2012
Сообщений: 104
#1

Поясните по указателям - C++

09.11.2012, 16:22. Просмотров 289. Ответов 2
Метки нет (Все метки)

Добрый день товарищи.

У меня вопрос:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
using namespace std;
 
int main()
{
    int ival1 = 5;
    int ival2 = 10;
    
    int *pointerint1;
    int *pointerint2;
 
    pointerint1 = &ival1;
    pointerint2 = &ival2;
 
    pointerint1 = pointerint2;
 
    cout << pointerint1 << "\n";
    cout << pointerint2 << "\n";
    cout << ival1 << "\n";
    cout << ival2 << "\n";
}
Почему при выводе значений переменных (ival1 и ival2) они не равны одному и тому же значению?
Ведь после получения значения адреса каждой из переменных я произвел присваивание адреса одной переменной другой стало быть они теперь ссылаются на одну и ту же область в памяти?

Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.11.2012, 16:22     Поясните по указателям
Посмотрите здесь:

Задача по указателям - C++
Есть два числа int. Составить их так, чтобы получить long из этих двух чисел int. (сделать с помощью указателей)

Вопрос по указателям - C++
В учебнике Дейтелов нашел код: void convertToUppercase(char *); int main() { char string = &quot;characters and $32.98&quot;; ...

Вопрос по указателям - C++
Ребят, простите за такую глупость, но вот не знаю как ответить на чётко поставленный преподавателем вопрос : &quot;Как зная указатель на...

Литература по указателям - C++
Нуждаюсь в литературе/справочниках/пособия и т.п. по указателям (которые разжуют все мелочи). Или ищу человечка, который сможет доступно...

обращения к указателям - C++
Написать обращения к указателям в глобальной,локальной и охватывающей сетях.

Подскажите по указателям - C++
Есть код: #include &lt;iostream&gt; using namespace std; int main() { int array; for(int i=0;i&lt;10;++i) { ...

Консультация по указателям - C++
Добрый день. Такая ситуация: мне нужно создать связаный линейный список с использованием указателей. При этом я использую операцию new....

Глупый вопрос по указателям? - C++
Здравствуйте! Подскажите как это работает? Правильно ли я понимаю? struct A { }; struct B: public A { int var1; ...

Лабораторная по структурам и указателям - C++
Доброго времени суток. Скорее моя проблема в чем то простом для Вас(сам я никогда до этого не имел дела с С++ ) . После C# мне не понятно...

Нужна литература по указателям - C++
Прохожу тему указатели и немного застрял, может кто по рекомендует литературу по этой теме, заранние спс.


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13059 / 7322 / 817
Регистрация: 27.09.2012
Сообщений: 18,074
Записей в блоге: 3
Завершенные тесты: 1
09.11.2012, 16:33     Поясните по указателям #2
Цитата Сообщение от denvasden Посмотреть сообщение
Ведь после получения значения адреса каждой из переменных я произвел присваивание адреса одной переменной другой стало быть они теперь ссылаются на одну и ту же область в памяти?
мням, мням... с одной стороны все верно, с другой совсем не верно!

Добавлено через 9 минут
Тут, думаю, всё понятно.
C++
1
2
3
4
5
6
#include <iostream> 
using namespace std; 
int main()
{
    int ival1 = 5;
    int ival2 = 10;
Объявляем 2 указателя
C++
1
2
    int *pointerint1;
    int *pointerint2;
Указателю pointerint1 присваиваем адрес переменной ival1 (пускай это будет 0x00000010)
C++
1
pointerint1 = &ival1;
Указателю pointerint2 присваиваем адрес переменной ival2 (пускай это будет 0x00000014)
C++
1
pointerint2 = &ival2;
Теперь Вы делайете так:
C++
1
pointerint1 = pointerint2;
В данном случае указателю pointerint1 присваивается pointerint2 и становиться таким же (0x00000014)
Соответственно здесь два указателя указывают на одну и ту же область памяти (0x00000014)
C++
1
2
    cout << pointerint1 << "\n";
    cout << pointerint2 << "\n";
По этому адресу у нас находится переменная ival2.

Чтобы сделать равными ival1 и ival2 нужно сделать разыменование указателей во время присваивания:
C++
1
*pointerint1 = *pointerint2;
'*' - оператор разыменования.
Можно данную строчку описать так:
возьми то, что лежит по адресу на который указывает pointerint2(0x00000014)
и положи это по тому адресу, куда указывает pointerint1(0x00000010)
denvasden
4 / 4 / 0
Регистрация: 25.10.2012
Сообщений: 104
09.11.2012, 16:40  [ТС]     Поясните по указателям #3
спасибо.
понял.
Ответ Создать тему
Опции темы

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