|
0 / 0 / 0
Регистрация: 26.10.2017
Сообщений: 10
|
||||||
Почему переменная изменяется после выполнения метода15.11.2017, 21:25. Показов 7247. Ответов 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 после выполнения фрагмента программы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии
Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
|
Текстовый слайдер с нумерацией страниц и кроссбраузерность.
russiannick 18.07.2026
Один мой друг написал текстовый слайдер с нумерацией страниц. Сегодня я расскажу как он умудрился подружить его с кроссбраузерностью.
Очевидно сложно угодить с шириной каждому браузеру. Один крадет. . .
|
Грибы - это мемы, дерево - это человек. Применение микоризной модели к теории меметики Докинза.
anaschu 18.07.2026
Меметический изоморфизм теории «всего»: Грибная сукцессия как модель эволюции идей Докинза
Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а универсальную. . .
|
Грибы - это корпорации, деревья - это государства. Механизм массонского захвата власти
anaschu 18.07.2026
Макроэкономический изоморфизм теории «всего»: Грибная сукцессия как модель транснационального капитализма
Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а. . .
|
|
Расчёт периметра прямоугольника по координатам вершин
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Вычислить периметр прямоугольника, заданного координатами своих вершин на плоскости.
Решение:
Создан документ со следующими. . .
|
Подсчёт частоты трёхбуквенных слов в тексте
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Выясните, сколько раз в предложенном тексте встречается каждое трехбуквенное слово.
Решение:
Создан документ с единственным. . .
|
Сумма и количество положительных элементов в чётных строках массива
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Вычислить сумму и количество положительных элементов массива, расположенных в четных строках.
Решение:
Создан документ с. . .
|
Поиск произведения положительных чётных чисел в последовательности
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Дана произвольная последовательность целых чисел. Найти произведение положительных четных чисел данной последовательности.
. . .
|