6/9(火)〜11(木) の学習ログです(主にC言語)
こんばんは、いつもありがとうございます。
梅雨入りしましたね。
0→1を生み出すには、MP(マジックポイント)を大量に使うのだと分かった安藤です(自分の世界観)。
入れまでは、HPがあれば、ある程度のことができたのですが、最近はMPが消耗しすぎてて。
一晩寝る以外に回復の方法が見つからないので、模索し続けたいと思います。
ちょっと訳が分からないかもしれませんが、そんな時もあります。
ちなみに内容にはかなり自信があります!笑
さて、学習ログです。
2020.6.9(火)
◎C言語(web記事「苦しんで覚えるC言語」)
●複数の型をまとめる
・構造体の使い方
構造体変数は、元となった構造体タグで宣言されていた全ての型を持っている。
配列の時には、同じ型の変数を番号によって区別していたが、
構造体変数では、型に関係なく全ての要素を名前によって区別する。
構造体変数の持つ1つの要素にアクセスするには、次のようにする。
構造体変数名.要素名
ここで、「.」とは小数点記号のこと。
このようにして個々の要素にアクセスすることができる。
構造体は、構造体変数自体を変数として取り扱うことができる。
例えば、構造体変数同士で、代入を行うことが可能。
構造体変数の比較や演算はできない。
構造体タグを、新しい型として1度に宣言してしまう方法がある。
C言語では、新しい型を宣言するtypedefが用意されている。
typedef 新しい型の形 新しい型名
◎読書「王様達ヴァインキング」
読了ーー!!!最高でした。
2020.6.10(水)
◎C言語(web記事「苦しんで覚えるC言語」)
●複数の型をまとめる
・構造体の引数
・構造体で情報を渡す
構造体はそれ自体が1つの変数として扱われます。
従って、構造体型の引数を使うことができ、1度に複数の情報を渡すことができる。
構造体型の引数も、通常の引数のように指定することができる。
ただし、typedefで宣言していない場合は、structをタグ名の前につける必要がある。
配列の時は、引数にしても、渡されるのは、先頭のアドレスだけだったけど、
構造体型の引数は、受け取る側の関数に全ての値がコピーされる。
従って、受け取る側の関数で引数の中身ウィ変更しても元の構造体変数位は影響しない。
呼び出し側でも通常の変数と同じ方法で呼び出すことができる。
・構造体の中の配列
構造体の中に配列が含まれている場合は、配列の中身もコピーされて渡される。
従って、中身を変更しても、呼び出し元の変数には影響しない。
配列をコピーして渡したい時には、構造体にしてしまうのが簡単な方法。
◎読書「自分の中に毒を持て」岡本太郎さん著
岡本太郎さん、かっこええっす!
2020.6.11(木)
◎C言語(web記事「苦しんで覚えるC言語」)
●複数の型をまとめる
・構造体でもポインタ変数
構造体型のポインタ変数を作ることができる。宣言方法は同じ。
構造体の各要素は、宣言時の順番通りに並んでおり、&演算子で求められるアドレスは、構造体のはじめの要素のアドレス。
構造体のポインタ変数の場合も、*記号で通常変数モードに切り替えることができる。
ただし、.の方が優先されるので、カッコをつけること。
(*構造体ポインタ変数名).要素名
ただ、(*)をつけるのは面倒なので、次の書き方で代用できるようにしているってよ。
構造体ポインタ変数名->要素名
・構造体でもポインタ引数
構造体型へのポインタ型の引数を持つ関数を作ることができる。
普通に渡すことができる構造体を、ポインタ変数として渡す理由の1つ目は、
普通のポインタ変数と同じく、関数内で値を変更できるようにするため。
2つ目は、関数呼び出しの高速化のため。
構造体を渡す時、その中身は全てコピーされる。構造体の中に大きな配列があれば、その中身まで丸ごとコピーされる。
当然これはそれなりの時間を処理に要する。
しかし、ポインタのアドレスを渡すだけなら、ほとんど時間はかからない。
一般的には、構造体はポインタ変数を使って受け渡しすることが多いよう。
今回は以上です。
今後生まれるアイディアはきっとやばいヤツだと思います。
産みの苦しみですが、頑張っていこうと思います。
それではまた!