Nikita
ох писец
Oleg
Объявляение просто вводит новое пустое значение
Oleg
А, пардон
Oleg
Ты исправил :)
Nikita
а
Nikita
ты про это
Nikita
а разница есть?
Oleksii
Oleksii
Это же извращение какое-то получается :)
Vladimir
https://play.golang.org/p/STVXHOr1ml
Vladimir
типа как раньше, закопал в середине stdio.h что-то типа #define true false и уволился.
Oleg
T - значение структуры, в чистом виде. Прям так и переносится из переменной в переменную копируясь.
*T - указатель. Где-то там в памяти лежит значение и мы переносим только адрес его.
Соответственно T{} создает значение. А &T{} - указатель.
Vladimir
а лучше ядро пересобрал перед этим
Oleksii
Kirill
Kirill
Но не нужно
Oleksii
Vladimir
нажми там на кнопачку "Run"
Vladimir
Ну или тут: https://play.golang.org/p/ZO9HY17orK
Oleksii
Я уже увидел, поэтому так отреагировал
Nikita
Oleg
Илья
а можешь сделать *a = *b
Vladimir
Я уже увидел, поэтому так отреагировал
Это собсно везде так:
[none-none][20:59:32] vlazarenko@alluminium (~/go/src/blip)$ cc -o a a.c
a.c:3:9: warning: 'NULL' macro redefined [-Wmacro-redefined]
#define NULL "xren vam i tut sobsno"
^
/Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/sys/_types/_null.h:29:9: note: previous definition is here
#define NULL __DARWIN_NULL
^
1 warning generated.
[none-none][20:59:34] vlazarenko@alluminium (~/go/src/blip)$ ./a
xren vam i tut sobsno[none-none][20:59:50] vlazarenko@alluminium (~/go/src/blip)$
[none-none][20:59:53] vlazarenko@alluminium (~/go/src/blip)$ cat a.c
#include <stdio.h>
#define NULL "xren vam i tut sobsno"
int main(void) {
printf("%s", NULL);
return 0;
}
Oleksii
Тут был бы лучше вопрос будут ли разными a := &T{"a"} и b := &T{"a"} :)
Nikita
странно, получается я делаю почти одно и тоже, только если не сделать & (как это называется?), то я буду знать где находится оригинал, а если сделать, то не буду знать где находится оригинал
Oleksii
Oleksii
Многое станет яснее
Vladimir
указатели это жопа, для тех, кто никогда не писал на C или C++
Oleksii
& - берешь адрес ячейки памяти
Vladimir
но разобравшись с ними, все становится намного понятнее и проще
Nikita
Oleksii
* - получаешь значение с ячейки памяти
Nikita
во 2 варианте, я уже работаю только ссылкой, а не с значением получается
Oleg
Угу
Nikita
a := T{"hi"}
b := &a
Nikita
но разве я так не могу делать?
Vladimir
при присваивании указателя всегда будет меняться нижележащее значение
Vladimir
при присваивании без указателя, в памяти будет копия данных
Oleg
Можешь. Тогда b.S изменит и a.S. Потому что b указывает на a.
Vladimir
b не имеет ничего в себе, кроме указателя на a (адреса в памяти)
Slava
Vladimir
это полезно когда, например, каким-то методом надо поменять значения, но при этом гонять копию данных по памяти туда сюда смысла нет.
Nikita
a := T{"hi"} & a := &T{"hi"} разница в подходах только получается? Я либо выбираю работать все время со значением и если что вручную скопирую ссылку, или постоянно работаю только с ссылкой
Oleg
В общем-то да.
Vladimir
если ты a никуда не будешь присваивать, то монопенисуально
Vladimir
а если будешь, то тогда уже нет
Nikita
Oleksii
Vladimir
a := T{"hi"}
b = a
в b копия a
Oleg
Vladimir
а := &T{"hi"}
b = a
в b копия а тоже, но в 10 раз меньше, ибо только адрес
Nikita
Vladimir
дальше в первом случае b.S = bla // a.S остается "hi"
Nikita
хотя по логике вещи одни и те же
Oleg
Oleksii
Vladimir
во втором: b.S = bla // a.S становится тоже bla
Vladimir
в <подставьте правильное число, пожалуйста> раз 🙂
Slava
Это неправда
Nikita
я про js
Nikita
говорю
Oleksii
Oleksii
Но я в нём не эксперт, так что ни за что не ручаюсь :)
Nikita
просто &T{"hi!"} вводит вступор, потому, что я вроде бы обращаюсь к указателю через операнд, а оказывается я получаю новую копию с ссылкой
Oleksii
Ты берешь адрес только что созданной структуры
Oleksii
Через литерал
Vladimir
Ты инициализируешь структуру, присваиваешь значение мемберу и получаешь ссылку на результат
Vladimir
чего ступорного-то?
Nikita
аааа
Oleg
& - не операнд, а оператор :)
Nikita
я смотрел на это не на как литерал, а как на еще одну функцию
Vladimir
а. нене. литерал 🙂
Nikita
&(оператор)T{}(операнд) вот так я считал
Nikita
блин, теперь я понял, что не так, я не привык, что могу создавать литералы