|
0 / 0 / 0
Регистрация: 26.10.2017
Сообщений: 10
|
||||||
Почему переменная изменяется после выполнения метода15.11.2017, 21:25. Показов 7228. Ответов 115
Метки нет (Все метки)
Вот код:
Всем добра
0
|
||||||
| 15.11.2017, 21:25 | |
|
Ответы с готовыми решениями:
115
Какое значение примет переменная после выполнения фрагмента алгоритма, если переменная а имела значение 'ИНФОРМАТИКА' После выполнения ajax-запроса переменная теряется |
|
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
|
||||||
| 16.11.2017, 18:50 | ||||||
0
|
||||||
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
|||||||||||||||||
| 16.11.2017, 19:03 | |||||||||||||||||
|
xoraxax, что делает метод видно, невидно, что он это делает именно by reference (лично для меня, не видно).
Когда любой язык, возьмём тот же Паскаль, передаёт в другую функцию параметр by reference, то это "синтаксическая обёртка". Компилятор трансформирует это в передачу по значению адреса переменной. Псевдокод:
JIeIIIa, а если меняется? ![]()
0
|
|||||||||||||||||
|
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
|
|||
| 16.11.2017, 19:06 | |||
|
Kukstyler, еще раз: integer - это аналог примитивных типов в Java. Указываете в Паскале val и будет передача по ссылке (после выполнения значение переменной изменится); не указываете val - передача по значению (и значение переменной после выполнения процедуры не изменится). Вы же какую-то неявную передачу придумали... Добавлено через 49 секунд Передаете в метод значение ссылки. Меняете то, что лежит по сслыке. Сама ссылка при этом не меняется. Вы вот поменяйте саму ссылку! Так чтоб после выполнения метода переменная ссылалась на что-то другое.
0
|
|||
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
|||
| 16.11.2017, 19:21 | |||
: вопрос на засыпку: назовите, что конкретно передаётся из одной функции в другую в Паскале, когда передача параметра происходит by reference? Что конкретно получает вторая, получающая параметр функция? Прошу чёткого обозначения.Добавлено через 1 минуту Добавлено через 11 минут
0
|
|||
|
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
|
||||||||
| 16.11.2017, 19:35 | ||||||||
В паскале такое возможно, т.к. там есть by-ref.
0
|
||||||||
|
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
|
||||||||||||||||||||||
| 16.11.2017, 19:57 | ||||||||||||||||||||||
|
Кликните здесь для просмотра всего текста
Результат: Кликните здесь для просмотра всего текста
Прошу обратить внимание, что в byRef и в byVal меняется указатель на адрес памяти и значение. При этом это никак не влияет на переменную b. В Java такого сделать не выйдет (смотреть мой пример ранее). Добавлено через 20 минут Чуть изменил чтоб видели что происходит с глобальной переменной в процедурах Кликните здесь для просмотра всего текста
Результат: Кликните здесь для просмотра всего текста
0
|
||||||||||||||||||||||
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
|||||||||||||||||||||||||||
| 16.11.2017, 20:23 | |||||||||||||||||||||||||||
|
2) и это не передача по ссылке, которой в Си тоже нет. Зато есть в C++:
Добавлено через 9 минут
0
|
|||||||||||||||||||||||||||
|
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
|
|
| 16.11.2017, 20:34 | |
|
korvin_, ага. Попутал var и val
0
|
|
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
|||||||||
| 17.11.2017, 11:45 | |||||||||
|
В твоём коде С++, ты выводишь адрес переменной, и адрес указателя, указывающего на эту переменную. Разницу чего я должен почуять? То что переменная int и другая переменная int* (тип указатель на int) имеют разные адреса? Это же очевидно, но, прости, мне не понятно что ты этим хочешь сказать. Ты имеешь в виду, что т.к. в Си синтаксически не существует implicit-ной формы передачи по указателю, то при объявлении указателя в параметрах, функция получает адрес указателя, и только после, через содержимое указателя, получает адрес самой переменной? Согласен! Но я уже говори на этот счёт. Это всего лишь вопрос синтаксиса языка (и компилятора, как он трансформирует это потом в машинный код). В данном случае, создаётся ещё одна переменная. Но давайте зреть в корень. Не как это делается в каждом языке, а почему/для чего существует понятие "by reference" и передача по указателю/ссылке? Суть же в том, что бы функция-2 могла получив адрес/ссылку переменной/объекта, могла модифицировать содержание этой/го переменной/объекта?! Значит, ты не согласен, что при implicit-ной передаче адреса, синтаксическим "трюком" какого-либо языка, адрес переменной не передаётся по значению? А по чему тогда?xoraxax, почему ты постоянно сворачиваешь куда-то?! Я не говорю про затирание ссылки новым адресом, ни в одном из моих постов я об этом не говорил. Я говорю про то, что в 2-х методах можно изменить параметры одного и того-же объекта. О том, что содержимое переменной в функции-1 может быть изменено в функции-2. Про сам принцип, про понятие как таковое. Я же несколько цитат привёл из гугла, где чётко используется слово "reference/by reference". Почему никто не приводит аргументы конкретно опровергающие правильность содержания данных цитат? JIeIIIa, если я правильно понял Ваш пример, то Вы говорите о том же, о чём korvin_. Хотите доказать мне, что у переменной типа указатель есть свой адрес в памяти... Это очевидно и так, я об этом и не спорил и не говорил. В итоге, появляется ещё одна промежуточная переменная, типа указатель, у которой естественно есть свой адрес... Господа, Вы пытаетесь сказать мне, что наличие, либо отсутствие промежуточной, явно объявленной переменной типа указатель, определяет тип передачи параметров, by value он или by reference? Если да, то это просто поверхностный взгляд на суть вопроса, вы уж меня простите. Ибо операция сама, передачи адреса, всегда происходит по значению, ВЕЗДЕ, будь то implicit-но (передача адреса самой переменной), или explicit-но (передача адреса указателя, содержащего адрес переменной). Если не согласны - обоснуйте, ЧТО передаётся и КАК в паскале когда передача переменной происходит by reference? Не адрес переменной по значению? Дорогие JIeIIIa, korvin_, xoraxax. Прокомментируйте пожалуйста эти цитаты, и в частности неправильность используемой терминологии касаемо "reference":
0
|
|||||||||
|
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
|
|
| 17.11.2017, 12:22 | |
|
0
|
|
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
||
| 17.11.2017, 12:37 | ||
|
xoraxax, читаю. Просто ты акцент смещаешь на затирание атрибута переданного как параметр в другой метод.
Я всегда "под капот" смотрю, профиль такой. ![]() Резюмируя, я говорю следующее: 1. Если говорить о понятии, то обращение к данным по адресу называется by reference. Точка. 2. Если говорить о технической ("подкапоной" части): везде, адрес переменной (любого типа, включая pointer) передаётся по значению. 3. Если язык позволяет implicit-ную передачу средствами синтаксической конструкции ("by ref") - под капотом, всё равно (!!!) передаётся адрес переменной по значению. Технически существует только by value. by reference - это понятие, интегрированное в синтаксис некоторых языков.
0
|
||
|
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
|
|
| 17.11.2017, 13:04 | |
|
0
|
|
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
|||||||||||
| 17.11.2017, 13:37 | |||||||||||
|
xoraxax, Да я давно разобрался!
https://en.wikipedia.org/wiki/... _reference
https://en.wikipedia.org/wiki/... er_science)
Результат: ---------------------------------------
0
|
|||||||||||
|
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
|
|
| 17.11.2017, 14:15 | |
|
0
|
|
|
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
|
||
| 17.11.2017, 14:31 | ||
|
Kukstyler, в byVal выделяется память для перенной i, которая была передана как параметр и это никак не влияет на глобальную переменную а; в byRef как только выделяем память для переменной i - сразу же меняется и адрес глобальной переменной а и никак не влияет на переменную b.
И вот во втором (byRef) случае это
0
|
||
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
|||||||
| 17.11.2017, 15:42 | |||||||
|
xoraxax, не противоречит. Фишка в том, что ты не называешь следующее "reference":
Ребят, очевидно, что вы не смотрите "под капот", и сами в этом признаётесь. Не можете или не хотите понимать, что: 1. Если вы исходите из того, что происходит "под капотом", то: всё всегда происходит by value - в том числе и копирование адреса указателя или переменной. Что опровергает вашу-же версию о том, что на самом деле технически by reference существует. 2. Если вы исходите из терминологии, то by reference означает обращение по адресу. Чего вы не признаёте, и называете это by value. 3. Упорно не хотите аргументированно опровергнуть правильность использования термина "reference" в приведённых мной цитатах, которыми кишит интернет. Котлеты отдельно, мухи отдельно, иначе мы с вами ни к чему не придём. Итог. Определитесь: 1. Либо мы говорим о "подкапотных" механизмах, и вы должны признать, что даже при синтаксических тюнингах в некоторых языках, на "подкапотном" уровне всё передаётся по значению (бы валуе), включая адреса, и тогда вы признаёте, что на "подкапотном" уровне by reference не существует. 2. Либо мы говорим о терминологии (внедрившуюся в синтаксис некоторых языков, как Паскаль), а в таком случае, термин "by reference" означает обращение к переменной по её адресу. Чётче/ярче/понятнее я объяснить не могу.
0
|
|||||||
|
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
|
|||
| 17.11.2017, 15:59 | |||
|
Kukstyler, Oracle (Passing Reference Data Type Arguments) с Вами не согласен.
В других языках программирования можно передать примитив (или объект), и в методе делать с ним все что угодно. И эти изменения будут видны за приделами метода. Это называется by reference.
0
|
|||
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
|||
| 17.11.2017, 16:08 | |||
|
JIeIIIa, ёкарный бабай, издеваетесь что ли?
Прочитайте мои посты в конце-то концов! Я же сам говорю, что технически всё всегда BY VALUE!!!!!!!!!!!!!!!! https://docs.oracle.com/javase... ernal=true
JIeIIIa, я Вас тоже уважаю, как и остальных 2-х оппонентов. Только почему Вы игнорируете в очередной раз мою просьбу аргументированно опровергнуть правильность использования термина "reference" в огромном количестве ресурсов, и в том числе и сам Oracle?
0
|
|||
|
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
|
|
| 17.11.2017, 16:08 | |
|
Kukstyler, сорри, но создается впечатление что чукча не читатель, а чукча писатель.
GB вообще не в тему.
0
|
|
|
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
|
|
| 17.11.2017, 16:13 | |
|
JIeIIIa, да при чём тут в тему не тему. Упорно не хотите понимать каких-то вещей, увиливаете от конкретных вопросов, заданных несколько раз. А я после этого чукча....
![]() GB в тему и всё в тему, где чётко используется ТЕРМИН REFERENCE!!! Добавлено через 1 минуту KolodeznyDiver, молвите словечко, Вам хотя бы понятно, что я говорю? может я так плохо объясняю?...
0
|
|
| 17.11.2017, 16:13 | |
|
Почему после изменения шаблона joomla 2.5 на денвере ничего не изменяется ? Какое значение примет переменная S после выполнения операторов Пустой список после выполнения метода Какое значение примет переменная s после выполнения следующих операторов? Какое значение получит переменная Y после выполнения фрагмента программы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот.
Ларри Уингет
|
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
|
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров
В текущей версии модели успешно реализован ключевой механизм. . .
|
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям
Реализованные компоненты:
Механизм закисления почвы через протонную помпу
Конкуренция между типами микориз
pH как триггер сукцессии
C/ P соотношение. . .
|
|
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
|
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
|
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы
## О чём эта статья
В процессе построения ОДУ-модели (система дифференциальных. . .
|
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет)
Содержание проекта
Симуляция вековой (50 лет) экологической сукцессии в почве леса
Основные участники: АМ-гриб, ЭКМ-гриб,. . .
|