Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
Полярный
 Аватар для dimcoder
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156

Дребедень с указателями хэлп

11.09.2011, 19:01. Показов 2443. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, форумчане. Изучаю с++, дошёл до указателей. Душа потребовала эксперементов. Прежде чем обяъявить проблему ,подумайте, какой ответ должна дать следующая программа на с++:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream.h>
#include <conio.h>
 
int modify(int *);
 
main ()
{
   int x = 10;
 
   cout << "modify(x) = " << modify(&x) << endl << "x = " << x << endl;
 
 
   getch();
 
 
   return 0;
}
 
int modify(int *y)
{
   *y = 1;
 
   return *y;
}
По идее (по моей идее), используя указатель *у, х доже модифицируется, должен быть ответ:
modify(x) = 1, а x = 1

Но у меня х = 10

Народ, подскажите, в чём проблема, точнее в чём моя проблема?

PS. Если перед cout вызвать функцию modify(&x), выдаёт правильный ответ (х = 1)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.09.2011, 19:01
Ответы с готовыми решениями:

Поиск от Mail.ru, реклама казино прочая дребедень
Всем привет! В общем хотел я скачать djvureader, ну скачал, молодец, установщик потом скачал ещё файл и только с него установил уже, а...

Хэлп !
Всем привет ! Не могли бы подсказать тружусь над сайтом, немогу понять что не так ? Какие рекомендации можете дать по оптимизации ? ...

ХЭЛП НАРОД
4 вариант огромное спасибо заранеее))

24
Эксперт С++
 Аватар для grizlik78
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
11.09.2011, 22:17
Студворк — интернет-сервис помощи студентам
На самом деле разные ответы запросто можно получить на одном компиляторе
На примере студии 2008:

D:\Temp\test\vc>cl /EHsc ptr.cpp /nologo
ptr.cpp

D:\Temp\test\vc>ptr.exe

modify(x) = 1
x = 10

D:\Temp\test\vc>cl /EHsc /O2 ptr.cpp /nologo
ptr.cpp

D:\Temp\test\vc>ptr.exe

modify(x) = 1
x = 1
0
Полярный
 Аватар для dimcoder
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
13.09.2011, 10:11  [ТС]
Цитата Сообщение от Kastaneda Посмотреть сообщение
Нет, выводиться в том порядке, в котором мы пишем. Дело в том - в какой последовательности аргументы кладутся в стек. Значение x будет положенно до вызова ф-ции и больше меняться не будет, отсюда и такой вывод.
Эти сообщения (#16 #17) многое для меня прояснили. Вывод: сначала значения записываются в стек (справа на лево), потом выводятся на экран - с помощью стека. Начинаю немного понимать для чего нужен стек и с чем его (едят) юзают.

Kastaneda, где можно просмотреть код асмы в компилере, как в вашем 13 сообщении?

Спасибо всем!
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
13.09.2011, 11:21
Пожалуй эту тему тоже стоит прикрепить, так как регулярно появляется этот вопрос про std::cout и регулярно ответы на него про стек и лево-право.
0
Эксперт С++
 Аватар для grizlik78
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
13.09.2011, 12:09
Цитата Сообщение от Mr.X Посмотреть сообщение
Пожалуй эту тему тоже стоит прикрепить, так как регулярно появляется этот вопрос про std::cout и регулярно ответы на него про стек и лево-право.
причём не помогают даже примеры, которые явно показывают, что порядок не определён
0
Заблокирован
13.09.2011, 19:07
Цитата Сообщение от dimcoder Посмотреть сообщение
Здравствуйте, форумчане. Изучаю с++, дошёл до указателей. Душа потребовала эксперементов. Прежде чем обяъявить проблему ,подумайте, какой ответ должна дать следующая программа на с++:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream.h>
#include <conio.h>
 
int modify(int *);
 
main ()
{
   int x = 10;
 
   cout << "modify(x) = " << modify(&x) << endl << "x = " << x << endl;
 
 
   getch();
 
 
   return 0;
}
 
int modify(int *y)
{
   *y = 1;
 
   return *y;
}
По идее (по моей идее), используя указатель *у, х доже модифицируется, должен быть ответ:
modify(x) = 1, а x = 1

Но у меня х = 10

Народ, подскажите, в чём проблема, точнее в чём моя проблема?

PS. Если перед cout вызвать функцию modify(&x), выдаёт правильный ответ (х = 1)

Тут вам наговорили всякой всячины, которая совершенно неверная!

Во-первых, что представляет из себя строка вашего кода

C++
1
cout << "modify(x) = " << modify(&x) << endl << "x = " << x << endl;
Это вложенные вызовы перегруженной оператора функции <<, Фактически, это следующий код

C++
1
operator( operator( operator( operator( opertaor( operator << ( cout,  "modify(x) = " ), modify(&x) ), endl  ), "x = " ), x ), endl );
То есть ваша переменная 'x' является вторым аргументом в предпоследнем внешнем вызове оператор функции. Так как стандарт не устанавливает порядок вычисления аргументов функции
, то совсем необзяательно, что сначала будет вызвана функция modify(&x) , а затем вычислено значение переменной 'x'. Напротив, чаще всего компиляторы, исходя из соглашений языка С++ для ассемблера по помещению аргументов в стек, начинают вычислять выражения аргументов справа налево! Именно это и произошло в вашем случае! То есть ваш компилятор сначала вычислил правый аргумент оператор-функции << - 'x', а затем вычислил значение левого аргумента, то есть то выражение, где происходит вызов функции modify(&x) .
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.09.2011, 19:07

хэлп плиз
1)Дана строка-предложение на латинском языке. Подсчитать количество содержащихся в строке знаков препинания. 2)Заданный одномерный...

Хэлп с программкой
http://s017.***********/i441/1110/cd/1a2ba193d90dt.jpg вот фото задания

Хэлп по лабораторной 2
Я прошу прощения, понимаю что выгляжу глупо, но не мог бы кто помочь с остальными 8 вопросами - не все зарегистрированы в контакте,...

хэлп по вёрстке
есть вот такой код (содержимое тегов скопировано с окна для примера) &lt;div id=&quot;description&quot;&gt; Microsoft приглашает...

склейщик хэлп ;)
Вот в этой теме - https://www.cyberforum.ru/visual-basic/thread350617.html - уважаемый &quot;-Storm-&quot; делал некий склейщик. Там указан код: ...


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru