объяви глобальную
Обьявил себя глобальной переменной, саванна сколлапсировала к хуям.
объяви локальную static и передай из зоны видимости ее адрес
Или просто создать указатель на переменную.
"просто указатель" не сработает если переменная физически перестает существовать за пределами зоны видимости (например, если она создается в стеке). Static нужен для того чтобы гарантировать ее сохранение.
Переменная по указателю создается не на стеку, а на куче. Хоть сам указатель и лежит на стеку. Указатель можно либо вернуть из функции, либо передать в аргументы функции, если там есть ссылка, и тогда эта переменная станет доступна снаружи.
Ты только что описал не "создать указатель на локальную переменную", а "выделить память и передать указатель на нее". Улавливаешь разницу?
А, я чет забыл, что речь идёт о локальной переменной.
Но можно ли тогда static переменную называть локальной? Она ведь тоже не на стеку выделяется.
Ну и соответственно динамическая память, созданная через new, не перестает существовать, выйдя за границы стека, потому что выделяется не на стеку. Вот пример на C++:
void foo(int*& a) {
a = new int();
}
void foo(int*& a) {
a = new int();
}
Объявляю глобальную переменную!
В джаве глобальных переменных техничестки нет.
C# со своим out расширяет границы (и не только их)
out просто передает значение по ссылке, область видимости переменной не изменится - получатся две переменные, каждая со своей областью
Шарпы не трогал давно, но похоже что ты путаешь out с ref. Но в любом случае это позволяет менять значение переменной за пределами стека вызова
Цитирую доку:
The out keyword causes arguments to be passed by reference. [...] It is like the ref keyword, except that ref requires that the variable be initialized before it is passed.
Так что это одно и то же. Да и в целом компилятор не обязан помещать переменные в стек - это же не C/C++, где при доступе за областью видимости будет UB или segfault. Так что это нормально - пусть значение живет отдельно от переменных, пока счетчик ссылок не обнулится или ее не съест сборщик мусора.
The out keyword causes arguments to be passed by reference. [...] It is like the ref keyword, except that ref requires that the variable be initialized before it is passed.
Так что это одно и то же. Да и в целом компилятор не обязан помещать переменные в стек - это же не C/C++, где при доступе за областью видимости будет UB или segfault. Так что это нормально - пусть значение живет отдельно от переменных, пока счетчик ссылок не обнулится или ее не съест сборщик мусора.
PHPшники шутку не оценили
PHP против социального неравенства среди переменных.
Тем временем в мире JS:
в js есть замыкание и доступен внешний скоуп
никто не любит JS :(
JS - Новый PHP
JS - Новый PHP
Ну почему не любит? JS - это классный язык, если используется TS.
На всякий случай призываю к кэпу.
Один львенок из африки сломал сегмент стека, и понеслось.
Чтобы написать коммент, необходимо залогиниться