くいなちゃんの初心者向け C言語の配列 講座ツイートまとめ

RTで流れてきて気になったのでまとめました。 あと誰か作っていないことを願って作成。 くいなちゃんの初心者向け C言語の配列 講座ツイートまとめ
8
くいなちゃん @b2

今から、C言語の配列のお話をしたいと思います。 聞きたいです?♡

2013-07-14 17:58:42
くいなちゃん @b2

C言語の配列、みんな知っているようで、意外とテキトーに済ませている人が多かったりします。 今日は、その あまり知られていない部分のお話をしたいと思いますー♡

2013-07-14 18:00:19
くいなちゃん @b2

大体一緒でしょ♡[要出典] ят @bolero_MURAKAMI C++の配列の話をしてください。

2013-07-14 18:00:45
くいなちゃん @b2

あっ、初心者さん向けの講座なので、ガチ勢さんはお帰りください。

2013-07-14 18:01:39
くいなちゃん @b2

まず、配列 int a[5]; に対し、a[3] = 0; とか書けると思います。 この a[3] は、配列でしょうか? どう見ても配列っぽいですよねー。 じつはー、これは配列ではありません!!!

2013-07-14 18:03:12
くいなちゃん @b2

前にも言いましたが、a[3] はコンパイル時に機械的に *(a + 3) になりますので、配列ではなく 「ポインタ演算」 になります。 では、この *(a + 3) をもう少し見ていくことにしましょうー☆

2013-07-14 18:04:38
くいなちゃん @b2

そもそも *(a + 3) とはどういう演算なのでしょうか。 ここに書かれている a とは、何を表すのか。 + 3 とはどういう演算なのか。 * は、何なのか。 これらを把握しないといけませんね。 順に説明しますっ。

2013-07-14 18:06:18
くいなちゃん @b2

まず a について。 int a[5]; と宣言して、式中に a と書いた場合、それは 「a[5] の領域が確保されているメモリ上の区間の、先頭アドレス」 を表します。 例えばa[5]において、アドレス100番地から int 5つ分のスペースが取られた場合、a は 100ですん☆

2013-07-14 18:09:19
くいなちゃん @b2

では、a + 3 は何を表すのでしょうか。 それは、a (a[5]の先頭アドレス) から、int 3つ分 進んだところのアドレス という意味になるです! ちなみに、もし a が char a[5]; ならば、a + 3 は int 3つ分先 ではなく、char 3つ分先になります

2013-07-14 18:11:39
くいなちゃん @b2

たとえば、ここで int を 4byte と仮定しましょう。 すると、先ほどの int a[5]; の a が 100番地 だったことから、a + 3 は、100 + 3 * 4 = 112番地 となるですん☆ ここまで大丈夫ですかにゃ。

2013-07-14 18:13:27
くいなちゃん @b2

最後に、*(a + 3) ですん。 * は、掛け算ではなく、「そのアドレス先にある値」 とか 「そのポインタが指す先の値」 を意味します。 つまり、a + 3 が112番地だったので、*(a + 3) は、メモリの112番地に格納されている値という意味ですね。 この値のサイズは、

2013-07-14 18:15:39
くいなちゃん @b2

この値のサイズは、a が int[5] であることにより、int のサイズ分として扱われます。 つまり、112番地から4byte(intのサイズ)分の値 という結果になるのですん☆ この結果は、わたしたちが a[3] を見て想像する値と同じものを指していますね♡

2013-07-14 18:18:43
くいなちゃん @b2

はい、ここまでは誰でも知っている話でした。 ここからちょっと話は深くなります♡♡♡♡

2013-07-14 18:19:52
くいなちゃん @b2

文字列と配列とポインタの関係ですん。 char c[6] = "Hello"; と書いたとき、c は先ほどの通り、メモリに確保されたchar 6つ分の領域の先頭アドレスを意味します。 で、その領域にそれぞれ H e l l o \0 が入っているわけですね。

2013-07-14 18:22:27
くいなちゃん @b2

では、char* c = "Hello"; と書いた場合はどうなるでしょう。 もちろん、これもコンパイル通ります♡ cだけ見ると、char c[6] のときと同様、単なるアドレスを指すポインタと解釈できますよね。 でもこの場合、メモリ上に領域が確保されていないように見えます!

2013-07-14 18:24:12
くいなちゃん @b2

えっ えっ ят @qront: @b2 大丈夫だけど番地とかアドレスとかの概念がない初心者のかなしみが聞こえます

2013-07-14 18:25:11
くいなちゃん @b2

えっ えっ ят @gaogao_9: @b2 (多分本当の初心者さんたちついてこれてない)

2013-07-14 18:25:23
くいなちゃん @b2

ご冗談を♡ ят @aini_bellwood: @b2 くいなちゃん、メモリアドレスは義務教育で習いません。

2013-07-14 18:26:28
くいなちゃん @b2

ポインタを一言で説明しますと、あなたがマウスを動かしたときに連動する 画面上の矢印がそれです。

2013-07-14 18:27:29
faidra (misskeyに移住) @faidra___

(そもそもくいなちゃんさんをフォローする時点で初心者じゃない)

2013-07-14 18:28:04
くいなちゃん @b2

そんなの人間じゃない!! ят @kaorin_linux: @b2 なんか最近のひとは、メモリとかその辺の概念ないらしい。

2013-07-14 18:28:08
ぷりん @yah_hn

くいなちゃんのツイート、自分がどこまで分かってるか不安になりながら追ってる

2013-07-14 18:28:48
比呂獅子 @forestoneHiroro

くいなちゃんの話気になるのに初心者があーだこーだいう奴何なの???? さっきの内容は参考書とかネットでも十分調べられる話じゃん。とりま、話聞いてから質問すればいいのでは?

2013-07-14 18:31:09
くいなちゃん @b2

いや、専門分野がどうとかではなく、一般常識の話なので… ят @m_akihiro: @b2 ラムダ計算理論から計算機科学に入った人に喧嘩売ってることになりませんかそれ

2013-07-14 18:31:22
ざわしぃ @zwxi

くいなちゃんの初心者向けは復習になるのでよい

2013-07-14 18:33:00