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

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

Восстановить пароль Регистрация
 
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
10.07.2013, 13:29     Прикол с указателями #1
взял пример с http://www.cplusplus.com/reference/algorithm/find/, немного поэксперементировал и наткнулся на необъяснимый факт)
Смотрим:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>     // std::cout
#include <algorithm>    // std::find
#include <vector>       // std::vector
int main () {
  int *p1, *p2;
// int p, *p1, *p2; 
  int myints[] = { 10, 20, 30 ,40 };
  p1 = std::find (myints,myints+4,30);
  ++p1;
  std::cout << "The element following 30 is " << *p1 << '\n';
  int p = *(std::find (myints,myints+4,30));
//p = *(std::find (myints,myints+4,30));
  std::cout << "It's obviously that p = "<< p << '\n';
  // а вот теперь прикол
  p2 = &p;
  p2++;
  std::cout << "The element following 30 is " << *p2 << '\n'; //как здесь появилось 10?
  return 0;
}
Это не всё: если раскоментировать закоментированные строчки, и закоментировать незакоментированные, то получим "The element following 30 is 30. Что за игры разума?!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11820 / 6799 / 769
Регистрация: 27.09.2012
Сообщений: 16,875
Записей в блоге: 2
Завершенные тесты: 1
10.07.2013, 13:33     Прикол с указателями #2
Цитата Сообщение от soican Посмотреть сообщение
//как здесь появилось 10?
Просто так компилятор решил расположить так их в памяти и когда Вы делаете это:
C++
1
2
  p2 = &p;
  p2++;
p2 указывает на память, которая лежит за переменной p. А что там лежит - вопрос реализации.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.07.2013, 13:47     Прикол с указателями #3
Организация памяти в х86
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
10.07.2013, 17:43     Прикол с указателями #4
soican, можешь попробовать, ничего не меняя в коде, собрать его в debug и в release версиях, вывод будет (может) отличатся.
Yandex
Объявления
10.07.2013, 17:43     Прикол с указателями
Ответ Создать тему
Опции темы

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