エンジニアもどきの雑記

メモ帳です。きっと。macアプリ配信windowsでもできるようになるまで絶対にメイン機にしないマン。特筆しない限り環境は【win10home,i5-7200u,8g,64bit,巨乳が好き】

【C#】UnityのためにC#を一から学ぶpart2.5【変数おまけ】

前回

dddpga1.hateblo.jp

まぁ、やってれば、勉強してれば憶えることだし
完全初心者向けなのではぶくかなーなんて思ってたのですが、
一応書いておこうと思って書きます。


int x;
x = 100;

int y;
y = x;
Console.WriteLine(y);

y = 1000;

Console.WriteLine(y);
Console.WriteLine(x);


例えばこれです。
x = 100でxは100になるわけです。
で、その後に新たに宣言したyに対してxを代入してます。


それを出力した一つ目のConsole.WriteLine(y)の結果は100です。
これは考えてわかるとおり、です。
xという100が代入されたものがyに代入されたので100です。


問題はその次。


xが代入されたyに対して1000を代入してます。

それを出力している二つ目のConsole.writeLine(y)ですが、
この結果は1000です。


まぁ、イメージつくと思いますが、一応解説。


んなことはいきなり言われてもわからない、と前の記事で書きましたが、これがスタックメモリ上にあるxとyの動きなのです。
スタックメモリに展開された変数は後入れ先出です。ロケットエンピツのように後ろから入れて前から出します。

イメージするとこう
int y;の宣言までで↓

|y   |
|x(100)|

上から入れてるイメージね。
こんな状態。

ここから、y = xとすると、どうなるか。


| y(100) |
| x(100) |



こうなります。
これは、xの値をyに対して、コピーしています。

| y(100) |
| x(100)↑copy! |

こうです。

で、そのyに対してy = 1000で代入するとどうなるか。

| y(1000) |
| x(100) |

こうなります。
単純な話ですが、100が入っていた箱に1000を【入れなおした】。
それだけです。

なので、最後のConsole.WriteLine(x)は100になります。今までの例えを見てわかる通り、xは値のcopyしかしてないから100を代入した時と何も変わってないからね。

正直、これを知らないでなんとなくのイメージで仕事してる人はたくさんいます。
そうじゃない人もたくさんいるけど。

なので最初は知らなくてもぶっちゃけなんとかなります。
でも、そのうちアンマネージコードとか書くことがあると死にます。
まぁ、書けなくても仕事はあるけどさ。


なので一応こういった細かい話も少しずつ間に挟もうかなーなんて。
気分次第ですけど、思ったので書きました。


次回

dddpga1.hateblo.jp