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

Если указатель хранит адрес ячейки памяти, на которую он указывает, то почему тогда в моем экспериментальном коде такой результат? - C++

Восстановить пароль Регистрация
 
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
22.01.2014, 17:28     Если указатель хранит адрес ячейки памяти, на которую он указывает, то почему тогда в моем экспериментальном коде такой результат? #1
Добрый день! Вот второй день разбираюсь с указателями и ссылками, и всё равно не могу заполнить пробелы.
Объясните, пожалуйста. Если указатель хранит адрес ячейки памяти, на которую он указывает, то почему тогда в моем экспериментальном коде такой результат? Заранее спасибо!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <iostream>
#define N 5
void main(void)
{
    int p = 4;
 
    int *pointer;
    pointer = &p;
 
    pointer += 1;
    std::cout << "pointer += 1" << std::endl;
    std::cout << "cout pointer " << pointer << std::endl;
    std::cout << "cout &pointer" <<&pointer << std::endl;
 
    *pointer += 1;
    std::cout << "*pointer += 1" << std::endl;
    std::cout << "cout pointer " << pointer << std::endl;
    std::cout << "cout &pointer" <<&pointer << std::endl;   
}
Результат

pointer += 1
cout pointer 003AF80C
cout &pointer003AF7F0
*pointer += 1
cout pointer 003AF80C
cout &pointer003AF7F0

Почему в первом варианте адрес ячейки не изменился? Я ведь увеличила его на единицу.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2014, 17:28     Если указатель хранит адрес ячейки памяти, на которую он указывает, то почему тогда в моем экспериментальном коде такой результат?
Посмотрите здесь:

C++ Как можно узнать размер выделенной динамической памяти, на которую ссылается указатель a?
C++ Ввести с клавиатуры фамилию и задать букву на поиск (любую) тогда вывести ее на экран если он есть, а если нет то сообщение что она отсутствует.
C++ Почему выдает такой результат?
Указатель куда указывает? C++
C++ Узнать указывает ли указатель
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11817 / 6796 / 769
Регистрация: 27.09.2012
Сообщений: 16,867
Записей в блоге: 2
Завершенные тесты: 1
22.01.2014, 17:31     Если указатель хранит адрес ячейки памяти, на которую он указывает, то почему тогда в моем экспериментальном коде такой результат? #2
Цитата Сообщение от Тамика Посмотреть сообщение
Почему в первом варианте адрес ячейки не изменился?
кто Вам это сказал? Выведите адрес до присваивания единицы
C++
1
*pointer += 1
а такое уже может плохо кончиться
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
22.01.2014, 17:34  [ТС]     Если указатель хранит адрес ячейки памяти, на которую он указывает, то почему тогда в моем экспериментальном коде такой результат? #3
И как всегда - только запостила тему, сразу и поняла что к чему.

Добавлено через 1 минуту
Цитата Сообщение от Croessmah Посмотреть сообщение
а такое уже может плохо кончиться
А почему? Разыменовала указатель и значение увеличила на единицу... Или нет?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.01.2014, 17:36     Если указатель хранит адрес ячейки памяти, на которую он указывает, то почему тогда в моем экспериментальном коде такой результат? #4
C++
1
2
3
4
5
6
7
8
9
10
int p = 4;
 
    int *pointer;
    pointer = &p;
    
    std::cout << "pointer" << pointer << std::endl;
    pointer += 1;
    std::cout << "pointer += 1" << std::endl;
    std::cout << "cout pointer " << pointer << std::endl;
    std::cout << "cout &pointer" <<&pointer << std::endl;
pointer0012FF60
pointer += 1
cout pointer 0012FF64
cout &pointer0012FF54
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
22.01.2014, 17:37     Если указатель хранит адрес ячейки памяти, на которую он указывает, то почему тогда в моем экспериментальном коде такой результат? #5
Тамика, он наверное имел ввиду
C++
1
pointer += 1;
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
22.01.2014, 17:40  [ТС]     Если указатель хранит адрес ячейки памяти, на которую он указывает, то почему тогда в моем экспериментальном коде такой результат? #6
Цитата Сообщение от Ev[G]eN Посмотреть сообщение
Тамика, он наверное имел ввиду
C++
1
pointer += 1;
Если так, то вопрос упрощается до "А почему?"
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
22.01.2014, 17:42     Если указатель хранит адрес ячейки памяти, на которую он указывает, то почему тогда в моем экспериментальном коде такой результат? #7
потому, что вы ссылаете его на неизвестную ячейку памяти, которая может отвечать за какой-то системный файл(ну, к примеру), а это опасно, я думаю по понятным причинам
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11817 / 6796 / 769
Регистрация: 27.09.2012
Сообщений: 16,867
Записей в блоге: 2
Завершенные тесты: 1
22.01.2014, 17:44     Если указатель хранит адрес ячейки памяти, на которую он указывает, то почему тогда в моем экспериментальном коде такой результат? #8
Цитата Сообщение от Тамика Посмотреть сообщение
Разыменовала указатель и значение увеличила на единицу... Или нет?
так и есть, только вот у Вас был адрес переменной p, вы "шагнули" в памяти вперед на sizeof(p) байт и что там лежит не понятно, так что присваивая туда что-то Вы портите данные программы, хорошо если программа упадет и Вы об этом узнаете, а если нет?
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
22.01.2014, 17:46  [ТС]     Если указатель хранит адрес ячейки памяти, на которую он указывает, то почему тогда в моем экспериментальном коде такой результат? #9
Ага, с этим понятно, спасибо!
Получается, что в коде
C++
1
2
3
4
int var = 10;
 
int& a = var;
int* pointer = &var;
значение a и *pointer - будут одинаковы? То есть - оба они будут ссылаться на var?
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
22.01.2014, 17:48     Если указатель хранит адрес ячейки памяти, на которую он указывает, то почему тогда в моем экспериментальном коде такой результат? #10
Цитата Сообщение от Тамика Посмотреть сообщение
значение a и *pointer - будут одинаковы?
конечно

Добавлено через 41 секунду
Цитата Сообщение от Тамика Посмотреть сообщение
То есть - оба они будут ссылаться на var?
да..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2014, 17:49     Если указатель хранит адрес ячейки памяти, на которую он указывает, то почему тогда в моем экспериментальном коде такой результат?
Еще ссылки по теме:

Почему программа выдает такой результат C++
C++ Получить адрес памяти, на который ссылается указатель
C++ Cos аргумента, почему такой результат?

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

Или воспользуйтесь поиском по форуму:
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
22.01.2014, 17:49  [ТС]     Если указатель хранит адрес ячейки памяти, на которую он указывает, то почему тогда в моем экспериментальном коде такой результат? #11
Прозрение наступило! Всем большое спасибо за то, что отозвались! Очень помогли
Yandex
Объявления
22.01.2014, 17:49     Если указатель хранит адрес ячейки памяти, на которую он указывает, то почему тогда в моем экспериментальном коде такой результат?
Ответ Создать тему
Опции темы

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