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

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

Войти
Регистрация
Восстановить пароль
 
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
#1

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

10.07.2013, 13:29. Просмотров 364. Ответов 3
Метки нет (Все метки)

взял пример с 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. Что за игры разума?!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2013, 13:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Прикол с указателями (C++):

В чем прикол?) - C++
Здравствуйте уважаемые программисты)Не пойму почему компилятор игнорирует 1 else...Вот код: / ffff.cpp: главный файл проекта. ...

Еще один глюк. На этот раз с printf. Объяснит мне кто-нибудь в чем прикол??? - C++
Вот кусок текста: Dir = Dir_X + Dir_Y; printf(&quot;X%d,&quot;,dX); printf(&quot;%s &quot;,Xs); ...

Прикол: Эволюция программиста на примере "Hello world" - C++
Эволюция программиста 1. Старший курс школы. 10 PRINT 'HELLO WORLD' 20 END 2. Младший курс института. ...

пример с указателями - C++
#include &quot;stdafx.h&quot; #include&lt;iostream&gt; #include &lt;clocale&gt; #include &lt;cmath&gt; using namespace std; double sumA(int *y,int d) {...

Массив. с указателями с++ - C++
1. Задан массив из 10 целых чисел. Посчитать количество смен знаков заданных чисел. Перебор элементов массива должен осуществляться...

Проблемка с указателями - C++
Нужно перегрузить &quot;+&quot; чтобы он делал слияние 2ух массивов(элементы не повторялись) вот код: #include &lt;iostream.h&gt; #include...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Croessmah
Модератор
Эксперт CЭксперт С++
13134 / 7397 / 828
Регистрация: 27.09.2012
Сообщений: 18,227
Записей в блоге: 3
Завершенные тесты: 1
10.07.2013, 13:33 #2
Цитата Сообщение от soican Посмотреть сообщение
//как здесь появилось 10?
Просто так компилятор решил расположить так их в памяти и когда Вы делаете это:
C++
1
2
  p2 = &p;
  p2++;
p2 указывает на память, которая лежит за переменной p. А что там лежит - вопрос реализации.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.07.2013, 13:47 #3
Организация памяти в х86
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
10.07.2013, 17:43 #4
soican, можешь попробовать, ничего не меняя в коде, собрать его в debug и в release версиях, вывод будет (может) отличатся.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2013, 17:43
Привет! Вот еще темы с ответами:

Операция с указателями - C++
SomeClass* ptr = sc1; SomeClass* ptr2 = ptr1; как имея только ptr2 изменить указатель ptr (изменить переменную, на которую ссылается ptr)...

Проблема с указателями. - C++
Доброго времени суток. Такой вопрос: если имеется массив указателей на объекты, как удалить из i-ой ячейки указатель или занулить его? ...

задача с Указателями - C++
помогите!!как этот код написать с указателями?? #include &quot;stdafx.h&quot; #include &quot;conio.h&quot; #include &quot;locale.h&quot; #include...

помогите с указателями - C++
Помогите переделать через указатель int *x. #include&lt;iostream.h&gt; #include&lt;string.h&gt; #include&lt;conio.h&gt; main() { clrscr();...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.07.2013, 17:43
Ответ Создать тему
Опции темы

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