2年ぶりぐらいにC言語のコード書いてたら&ってなに?ってなった件

【結論】

&変数名 として扱ったらそれはポインタ渡しである。

【サンプルコード】

#include <stdio.h>


/*  Result

     var1 - d: 100
     var1 - d: 0x7ffee6c0d8fc
 var2 = &var1: 0x7ffee6c0d8fc
*var2 =   255: 255

*/


int main(void) {
    int var1 = 100;
    int *var2;

    printf("     var1 - d: %d\n", var1);
    printf("     var1 - d: %p\n", &var1);

    var2 = &var1;
    printf(" var2 = &var1: %p\n", var2);

    *var2 = 255;
    printf("*var2 =   255: %d\n", var1);
}


サンプルコードでは2つの変数を使って ポインタ渡し 値渡し を行っています。
ポインタと言うのは割り当てのようなもので、変数だったりを保存させておくための部屋みたいなもの。

だから

var2 = &var1;

この部分でポインタ渡しを行ったことによってvar1とva2の2つの変数のリソースが統合されましたね。
なのでポインタの番地と最後の出力がvar2と1が一致するようになります。

【まとめ】

&変数名 として扱ったらそれはポインタ渡しであると言うことはつまり、割り当てられていた場所を渡しているので
渡した変数、渡された変数の2つは同じリソースを共有していることになる。
だから渡された変数に代入された値などは渡した変数にも影響がある。