libro
www.tuyano.com
Objective-C初心者のためのC言語超入門

配列からポインタへ! (4/5)

作成:2011-02-03 11:27
更新:2011-02-03 11:27

■アドレスを操作しよう

このポインタという値は、テキスト(char配列)だけで利用可能なわけではありません。普通の値であっても利用することができます。例えば、数字をポインタで利用するにはどうすればいいでしょうか。これは、以下のような形になります。
int n = 123;
int* na = &n;
一般の値は、そのまま変数に値のデータが保管されます。ポインタは、その値が保管されているアドレスですから、「アドレスの値」を取り出して利用することになります。それが「&」という記号です。「&変数」というように書くことで、その変数のアドレスを取り出すことができるのです。

――では、ポインタから、そこにある値を取り出すときはどうすればいいんでしょうか。これは「*変数」という具合に、変数の前に*をつけて記述をしてやります。例えば上の例なら、
int nv = *na;
こんな具合にすれば、intポインタ変数naから、そのポインタのアドレスにある値を取り出すことができます。こうやって、「&変数」でアドレスを取り出し、「*変数」でそのアドレスにある値を取り出す――というやりとりの仕方さえわかれば、ポインタを使って値を管理するのはそう難しいものではありません。

ポインタを動かす!

実際問題として、普通の整数などの値を保管するのに、わざわざポインタを利用することはあまりないでしょう。ポインタの威力が発揮されるのは、やっぱり「配列」を使う時です。

ポインタには、非常に面白い性質があります。それは「足し算引き算することでアドレスを移動できる」のです。例えば、「val += 2;」とすれば、データ2つ分、アドレスを進めることができます。また値を引けば戻ることができます。

これは、配列を利用する場合、非常に有効です。インデックスを使って指定する場合、ポインタに数字を足したり引いたりすることで、配列内のあちこちにある値を取り出せるようになるのですから。

下のリスト欄に、簡単な利用例をあげておきました。ここでは配列のポインタをとりだし、「arr++」として1つずつ移動しながら値を出力させています。同じ変数でありながら、こうして移動することでポインタが指し示す値が変わる……というのは、なかなか不思議な感じがしますね。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

#include <stdio.h>

int main (int argc, const char * argv[]) {
    int data[] = {12,345,6789};
	int* arr = data;
	for (int i = 0; i < 3; i++) {
		printf("%i\n",*arr++);
	}
	return 0;
}

※関連コンテンツ

「Objective-C初心者のためのC言語超入門」に戻る