C言語 入門 小学生でもわかるC言語2

四日目 ポインタ

「わかりやすく!」がテーマです!

HOME/小学生でもわかるC言語2 目次/四日目 ポインタ/

広告

↓2016年02月29日発売↓

12歳からはじめる ゼロからのC言語 ゲームプログラミング教室

新品価格
¥2,462から
(2016/5/10 22:16時点)

もっと!C、C++言語本

目次へ戻る

?と思ったら

わからなそうな用語集

ポインタ

今回からポインタの解説をしていきたいと思います!

注意

ポインタは直接コンピューターの内部に触れていくので、もし間違った命令をしてしまうと、プログラムの暴走、データの破損などもありえますのでそのへんは自己責任でお願いします!

「わかりやすく!」がテーマ

これからする説明はいろいろ複雑なお話をできるだけ省略して、

プラス少々味付けして説明しますので、正確さを欠く場合もあるかと思いますがそこはお許しください!

保存する場所

例えば

int suji = 10;

と変数「suji」を宣言したとして

この変数「suji」はコンピューターのどこかに保存されてるワケですよね。

このコンピューターがいろいろなデータを保存している場所の事を「メモリ」といいます。

↓メモリ↓

メモリアドレス内容
0番地21
1番地5
2番地33
3番地8
4番地0

こんな感じで規則正しく並んでます。

番号のふってある下駄箱とかロッカーみたいなものを想像するとわかりやすいかもしれません。

そしてロッカーでいうところの番号にあたる部分を「メモリアドレス」っていいます。

上の図で言うとメモリアドレス3番地のデータは「33」って事ですね。

そしてこの「メモリアドレス」そのものを保存するのがポインタといいます。

「int」や「char」と同じく変数の一種でポインタ変数ともいいます。

昔の話

ポインタを学び始めると「何のためにポインタはあるのか?」と疑問に思う事があると思います。

先にその事をお話したいと思います。

昔々のお話です。

その当時のプログラミングの仕方はメモリアドレスに直接プログラムを書いていくという事をしてました。

しかしこのメモリアドレスは単なる英数字のかたまりなので覚えにくかったり、計算しづらかったりで、コンピューターの容量が増えるにつれて

「あれ?この前どこに保存したっけなー?」

「やべっ!大事なデータ消しちゃった!」

みたいな問題が起きるようになりました。

そしてその問題を解決するためというか、もっとコンピューターを使いやすくする為に今使っている「Windows」のようなオペレーティングシステム(OS)というものが生まれました。

このOSが代わりにメモリ管理をしてくれるのでうっかりミスを防げるワケです。

そしてこのOSなんかを作る時には当たり前ですがメモリアドレスなどをバンバンいじっていきます。

話を戻すとこのC言語もそんな大変古い時代からある言語でこのOSを作る時などにも使用された言語なのでポインタのようなメモリアドレスに直接触れていくという機能が残っているんですね!

なんのためにポインタを使うかってよりかはこのメモリアドレスを直接操作しながらプログラムを組むのが当たり前だからあるって感じです。

今ではOSを作ったりしない限りはこのメモリアドレスを直接指定してプログラムする事はまずないと思いますが、後ほどやる構造体(こうぞうたい)や関数ポインタなどでポインタの機能が使われます。

なのでC言語を習得するにあたりこのポインタは避けては通れない道なのです。

メモリアドレスを表示

では試しにメモリアドレスを表示してみましょう。

/*プログラム15*/
#include <stdio.h>

int main(){
	int suji = 10;
	printf("変数「suji」のメモリアドレス = %x\n",&suji);

	return 0;
}

■実行結果■

実行結果(e-4-1)

「112f8e0」と謎の英数字が並んでいます。

実はこの謎の英数字こそがメモリアドレスになります。

そして何度も言いますがこの変数「suji」なんかのメモリアドレスを保存していろいろ使っていきましょう!というのがポインタになります。

ところで

「俺のコンピューターは違う英数字が並んだぞ!」

という方いると思います。

これはコンピューターはその時空いているメモリに保存する為、違う結果になります。

本棚に新しく買った本をしまう時って前までに買った本があるから毎回少し違う場所にしまいますよね。

そんな感じです。

話をもとに戻します。

変数のメモリアドレスを知りたい時は頭に「&」をつけます。

この「&」どこかで見たような記憶がありますよね?

そうです!関数「scanf()」の時にも変数の頭につけてました!

このへんについては次回からすこしずつ説明したいと思います。

そして結果のメモリアドレスを表示する時は

「%x」

を使います。これは「%d」なんかと同じで16進数で表示したい時はこの「%x」を使います。

16進数?

というのは数字の進み方の一つです。16までいったら2ケタになります。

わかりずらいですよね。

普通に使うのは10進数といいます。

10までいったら2ケタになります。

0123456789→10

9の次に2ケタになってます。

これと同じように16でケタがあがります。

0123456789abcdef→10

10以上を表す数字がないので代わりにa〜fを使います。

という事を踏まえた上でさきほどの結果を見てみると

「112f8e0」

ワケわからんですね・・・。

でも大丈夫です!

今はアドレス計算をする事なんてまずないので

「アドレスを表示する時は「%x」を使って16進数で表示する」

という事だけ覚えてれば大丈夫です!

今回はこのへんで次回、実際にポインタを使っていきましょう!

次回

五日目 ポインタ2

□ページの先頭へ□

□目次へ戻る□

広告

↓2014年06月20日発売↓

14歳からはじめるC言語わくわくゲームプログラミング教室 Visual Studio 2013編

新品価格
¥2,500から
(2016/5/10 22:17時点)

↓2014年10月25日発売↓

超本格! サンプルで覚えるC言語 3Dゲームプログラミング教室

新品価格
¥3,110から
(2016/5/10 22:18時点)

↓2013年07月25日発売↓

小学生からはじめるわくわくプログラミング

新品価格
¥2,052から
(2016/5/10 22:21時点)

↓2016年05月13日発売↓

小学生からはじめるわくわくプログラミング2

新品価格
¥2,052から
(2016/5/10 22:22時点)

もっと!C、C++言語本