Javaやってる低速駆け出しエンジニアです(1年半)。
30代未経験からこの業界に入って最初にとまどった事『2進数・16進数ってなに?!』でした
そして今も変わらず同レベル。。こ
の記事では、そんなレベルの私がC言語を(チョット)勉強して、メモリの事とポインタの事が
なんとなく分かったような気がする
っていう記事です。
ポインタを学ぶ過程で学んだこと事
①コンピュータは何故(01)2進数を使うのか?
言語をコンパイルするときに機械語に変換してるとは聞いたけど、、
なんで機械語にする必要があるのか分からなかった。
簡単にまとめてみた:
下記サイトを簡単にまとめると
「コンピュータの電子部品(集積回路)が0・1で電気のやり取りをやっているから。」
参考サイト
https://xtech.nikkei.com/atcl/learning/lecture/19/00007/00001/?P=4
②変数ってメモリにどう保持されるんだろう?
簡単にまとめてみた:
例)
int num = 1;
CP男('ω')「int型で値が1の名前がnum」ってやつがきたバイ
メモリ子('ω')ノ「私のメモリ45000番地に保管してあげるけんね」
CP男('ω')「int型は4バイトばい。ちゃんとその広さ確保してね、ついでにその表札はnumにするの忘れたらいかんばい」
メモリ子('ω')ノ「しゃーしかー」
(*登場人物は関係ありません)
みたいな感じでメモリに保存されるらしい(分かりずらっ)
ここで大事なのは、
・int型(4バイト)が
・メモリ45000番地に確保されて、
・値が1入った。
・で、それを名前(変数)numでやり取りする。
この考えが頭に入ったのでポインタへのハードルが少し下がったきがしました。
このサイトがめちゃめちゃ役に立ちましたm(__)m(ポインタ記載あり)
https://qiita.com/developer-kikikaikai/items/0910c3c96e2164094449
ポインタって何?
int main(void) {
int num = 1; // int型変数
int *p_num; // int型ポインタ変数
p_num = # // ポインタ変数「p_num」に変数numアドレスを代入(&はnumのアドレスを示す)
printf("int型変数numのアドレス:%p\n", &num);
printf("int型変数numのアドレス先の値:%d\n", *(&num));
printf("int型ポインタ変数p_numの参照先の値:%d\n", *p_num); //(*アドレスの値を示す)
return 0;
}
int型変数numのアドレス:0x7ffd0a0ecc64
int型変数numのアドレス先の値:1
int型ポインタ変数p_numの参照先の値:1
解説)
p_num = #でポインタ型変数p_numにnumのアドレスを代入している
printf(*p_num);で、numのアドレスの値を参照しているので1がでる。
説明下手だな。。
ここが一番勉強になりましたm(_ )m
https://monozukuri-c.com/langc-pointer-interpretation/
ここもシンプルで勉強になりましたm( _)m
https://qiita.com/hikoalpha/items/536e370a2937a1ecb66d
終わり
C言語はメモリ管理とかポインタとか、めっちゃ難しそうと思ったけど 原理を理解するとパソコンの基礎に行き着くのでとても勉強になりましたもしよかったらコメントでアドバイスご指摘おまちしています〜^o^