ポインタを理解する
苦しんで覚えるC言語、通称「苦C」を最近読んでいる。
道中「はいはい他の言語でやった」と飛ばして、今Cの代名詞とも言えるポインタに入った。
今までやってきた言語(javascript,PHP)ではメモリなんて一切考えたことがなかったから、なかなか興味深い。
要するに、メモリの住所を指定するサムシングなのね。と何となーくの認識で読んでたら(ちゃんと理解せずに読み進めてたら意味ないぞ)この節で
引数による情報の受け渡し
C言語では、関数へ情報を渡す場合、必ず元の変数の値のコピーを渡します。
この様な方法を値渡しと呼び、元の変数の値が変更されないことが特徴です
えっそうなの!!?
ということで試しに簡単なコードを書いてみた。
関数で変数に10を足して表示させるだけ。
#include <stdio.h> void func(int num); int main(void) { int num = 1; printf("%d\n",num); //実行結果1行目 func(num); //↓の関数を実行。numに10足して結果表示 printf("%d\n",num); //実行結果3行目 return 0; } void func(int num) { num += 10; printf("%d\n", num); //実行結果2行目 return; }
実行結果
1 11 1
わ、本当だ!mainの中の変数は変わってない!!
次に、上の苦Cの通り変数をポインタ変数に変えてみた。
#include <stdio.h> void func(int *num); //引数宣言時にポインタ変数を宣言 int main(void) { int num = 1; //ここは普通の変数でいい。らしい printf("%d\n",num); func(&num); //変数の”アドレス"を代入することでポインタ変数を代入になる。らしい printf("%d\n",num); return 0; } void func(int *num) { *num += 10; //ポインタ変数を通常変数にして10足す printf("%d\n", *num); //通常変数を出力 return; }
1 11 11
おおー、ちゃんと上書きされてる。
ポインタの必要性わかってきたぞ。ポインタを制すればCを制すって聞いたことある(多分ない)し行ける気がするぞ。
と、思って読み進めたら配列だとまた挙動が変わってくるとか、、、
まだ道のりは長そうだ、これはまた次回
テレビとPCをまとめてスピーカーで出力させるついでにスイッチャーを作る(製作・前編)
小生遅刻したくないでござる!!小生時間を守る人間になりたいでござる!!
先日、山の日(8/11)に内定者懇親会があり
交通費を浮かせるために高速バスで行こうとしたら、お盆休み初日の大渋滞に巻き込まれて1時間半の大遅刻。
つらい
さてこの続き
halfrighter.hatenadiary.jp
はじめに
3月にひっそりとツイ禁してる裏で思いついてたことを垂れ流していたのですが、リニューアルして人様に見られても良いブログにすることにした。
小生のプロフィール ずっと東京育ちで都内の某大学の院生(専攻は電電)、でも2017年4月から就職で静岡県民になる予定。 趣味でエフェクター作ったりはしてたけどソフト側は本当に何もわかってない。 プログラミングは去年2ヶ月くらいjavascriptを独学で、それ以降、去年の10月から高校の同級生の紹介でPHPエンジニアのインターンを超初心者のまま今まで ブラウザ上で動く以外の言語はMATLABにちょっと触っただけなのは良くないんじゃね? と思ってCを始めてみる。
なんかの記事に プログラミングの勉強は
読む
やってみる
やったことをブログに書く
がいいって書いてあったのでこのブログにやったことを書くことにした。確かにすぐ忘れて一から調べ直すしな
開発環境は Mac OS X El Captain(就職祝いって言って最近親からお金をもらって買った) + Xcode(エンジニアのバイトで必要って書いてあったから入れてあった)+ atom(研究室の同期オススメのテキストエディタ、初めて選んだのがこれだからって理由だけで使ってる)
VirtualBoxやらいろいろ入ってはいるんだけど使い方全然わからない
続くよう頑張ります。