プログラミング備忘録

イラストも描けるエンジニアになりたい情報学部生です!IT関連の知識、経験に欠けているため色々と覚えていこう(+画力の向上過程を残したい)という主旨の備忘録ブログ!

C言語ポインタ備忘録②

遅々たる進展ですが少しずつポインタの勉強をしています。

今回はswap関数と値渡しなるものについて取り上げていきます。

ポインタのお話の中で当然のように出てくるswap関数なんですが本の説明が分かりにくいのか理解力が及ばないのかさっぱり(;^_^A

 

このswap関数とは変数の値をその名のとおり交換するものでして、「ポインタを使わないと変数の値が交換されないよ!」ということを説明するためによく用いられています。

まず、ポインタを使わないで変数の値を交換する例ですが・・・

f:id:martheid9881:20170315022828p:plain

f:id:martheid9881:20170315023513p:plain

このように実行して見たところ値が変わっていません。これは値渡しをしているからうまくいかないようです。

 

・・・値渡し?なんぞそれ?正直なんで上の関数が上手くいかないのかもわからない!

→というわけでググッてきました

 

値渡しとは:上のものを例に挙げると、

1.x,y,a,bにそれぞれアドレスが割り振られたとする。

2.x=5,y=10が代入される。

3.値渡しにより、x,yの値のコピーがa,bに代入される。

というように値渡しでは変数の値のコピーが渡されると考えてよいでしょう。(厳密には違うかもしれませんが)

f:id:martheid9881:20170315030850p:plain

値渡しによって渡されるのはコピーされた値なのでswap関数で交換してもa=10,b=5になるだけでx=10,y=5にはならないということです。

では、ポインタを用いるとどうなるかというと次のようになります。

f:id:martheid9881:20170315031645p:plain

この関数ではswap関数に&x,&yを引数として与えています。また、関数内では*a,*bとすることで与えられたアドレスに格納された値を参照しているためx,yの値を交換出来ているんですね。

正直この説明だと理解するのに時間がかかったり混乱する気がするので図から直感的に理解したほうが早いかもしれません。というわけで、図です。

f:id:martheid9881:20170315033220p:plain

この図において注目したいのは*a=5の5がコピーされたものではなくx=5の5であるということです。なのでswap関数によって*a=10になったということはn番地にある値が10になったということ。つまりx=10になる!

 

とまあswap関数と値渡しに関してはこのくらいで勘弁してほしいところです。

おそらくまったく難しい箇所ではないと思うんですけど、ガッツリ引っかかってしまうんだね ( ;∀;)

あ、それと上の図から私の絵のレベルは察してください!

仮想環境作成

現在ポインタの勉強と平行してMySQLレプリケーション用仮想サーバを構築しているのですが・・・。

viを開いたところコマンドモードでコロン(:)が反応しない∑(ノ▽ο▽)ノ

他にもダブルクウォート、シングルクウォートのキーボード上での位置が変わってたり。

何が原因かというとキーボードの配列設定が英語になっていたことっぽい。

localectl set-keymap jp106

上記のコマンドを入力することで日本語キーボードに設定を変更することが出来た。

色々と詳しいことは不明だが調べる気がないのでスルー(早くMySQLに移りたかった!)しました。

あと、VMware player使ってるときにビープ音が煩わしかったので仮想OSのvmxファイルをいじって消したり・・・。

結局だらだらとレプリケーション用サーバを三つ作ってたら結構時間がかかってMySQLいじれなかったから今日はMySQLをいじっていきたい!

 

あ、それとイラストに関してまったく触れてませんでしたが最近はペンタブ使ってひたすら丸を描いている日々。。。ペンタブの感触に慣れるためだけど中々難しいんだよなぁ

 

C言語ポインタ備忘録①

一ヶ月たってたのか・・・。大学のほうが落ち着いたので、再びスタートっす。

Unityやってたんですけど作りたいものが見えてこなかったのと、興味が他に移ったこともあり今はC言語のポインタについて本とか読んでます。

自分の理解の一助として本ブログを活用していく予定。

というわけで、現在「C言語ポインタ完全制覇」という本をamazonのレビューがそこそこだったのと、本屋さんで他のものと比べた結果購入し現在読み始めたところです。(内容の良し悪しが分かるほどの知識はないのでほぼレビューで決めましたが笑)

 

・ポインタの値をprintf()で表示する場合は、%pを用いるらしい。

f:id:martheid9881:20170307015719p:plain

 

イラスト×エンジニア

イラスト描けるようになりたい!って思って色々調べて見たら色々ありすぎて困りました。今のところペンタブを購入して、模写を始めようとしているところです。ネットにあげて良いのかという疑問があるので模写はとりあえず上げないでおきますがオリジナルを描いたら上げようと思ってます。

 

IT関係に関してはUnityをちょっといじっていたくらいですね。まだまだ分からないことが沢山で苦労しそうな予感が。。。

はじめの一歩

備忘録用としてブログを始めてみます。

三日坊主的な性格なため、まずは一週間を目標に日々投稿していきたい。。。

何を作りたいとかがなく知識欲にただ従ってます。色んなものに手を出してるうちに何か作りたいものが見えてくればいいなぁ。

 

追記2017/02/04

三日すら持たなかったね!ってことでまた始めて行きます