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

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

Восстановить пароль Регистрация
 
denvasden
4 / 4 / 0
Регистрация: 25.10.2012
Сообщений: 104
09.11.2012, 16:22     Поясните по указателям #1
Добрый день товарищи.

У меня вопрос:
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++
C++ Вопрос по указателям
C++ Несколько вопросов по указателям.
C++ Вопрос по указателям
C++ обращения к указателям
Подскажите по указателям C++
Задача по указателям C++
Литература по указателям C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,898
Записей в блоге: 2
Завершенные тесты: 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
спасибо.
понял.
Yandex
Объявления
09.11.2012, 16:40     Поясните по указателям
Ответ Создать тему
Опции темы

Текущее время: 21:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru