Полярный
476 / 448 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
|
||||||
1 | ||||||
Дребедень с указателями хэлп11.09.2011, 19:01. Показов 1851. Ответов 24
Метки нет (Все метки)
Здравствуйте, форумчане. Изучаю с++, дошёл до указателей. Душа потребовала эксперементов. Прежде чем обяъявить проблему ,подумайте, какой ответ должна дать следующая программа на с++:
modify(x) = 1, а x = 1 Но у меня х = 10 Народ, подскажите, в чём проблема, точнее в чём моя проблема? PS. Если перед cout вызвать функцию modify(&x), выдаёт правильный ответ (х = 1)
0
|
11.09.2011, 19:01 | |
Ответы с готовыми решениями:
24
Поиск от Mail.ru, реклама казино прочая дребедень Хэлп ! ХЭЛП НАРОД хэлп плиз |
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
11.09.2011, 22:17 | 21 |
На самом деле разные ответы запросто можно получить на одном компиляторе
На примере студии 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
|
Полярный
476 / 448 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
|
|
13.09.2011, 10:11 [ТС] | 22 |
Эти сообщения (#16 #17) многое для меня прояснили. Вывод: сначала значения записываются в стек (справа на лево), потом выводятся на экран - с помощью стека. Начинаю немного понимать для чего нужен стек и с чем его (едят) юзают.
Kastaneda, где можно просмотреть код асмы в компилере, как в вашем 13 сообщении? Спасибо всем!
0
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
13.09.2011, 11:21 | 23 |
Пожалуй эту тему тоже стоит прикрепить, так как регулярно появляется этот вопрос про std::cout и регулярно ответы на него про стек и лево-право.
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
13.09.2011, 12:09 | 24 |
причём не помогают даже примеры, которые явно показывают, что порядок не определён
0
|
Заблокирован
|
|||||||||||
13.09.2011, 19:07 | 25 | ||||||||||
Тут вам наговорили всякой всячины, которая совершенно неверная! Во-первых, что представляет из себя строка вашего кода
, то совсем необзяательно, что сначала будет вызвана функция modify(&x) , а затем вычислено значение переменной 'x'. Напротив, чаще всего компиляторы, исходя из соглашений языка С++ для ассемблера по помещению аргументов в стек, начинают вычислять выражения аргументов справа налево! Именно это и произошло в вашем случае! То есть ваш компилятор сначала вычислил правый аргумент оператор-функции << - 'x', а затем вычислил значение левого аргумента, то есть то выражение, где происходит вызов функции modify(&x) .
1
|
13.09.2011, 19:07 | |
13.09.2011, 19:07 | |
Помогаю со студенческими работами здесь
25
Хэлп с программкой Хэлп по лабораторной 2 хэлп по вёрстке склейщик хэлп ;) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |