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

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

作成:2011-02-03 09:47
更新:2011-02-03 10:31

■配列とテキストの値

さて、ここでこの配列が、メモリの中でどう保管されているのかを考えてみましょう。――配列は、メモリの中で「タイプのデータ量×要素数」の分だけ領域が確保されます。そして、その領域に、各要素の値がずらっと書かれることになります。

つまり、配列を確保した場所に最初の要素の値が、メモリ内のとなりの場所に2番目の値が、その隣に3番目の値が……という具合に、保管する値がずらっとメモリの中で並べられた感じになっているわけですね。

この「同じ種類の値がずらっと並んでいる」という状態、何か想像しませんか? とても重要な値なんだけど、C言語ではちゃんとしたタイプとして用意されていない値……。そう、「テキスト」です! テキストって、1つ1つの文字がずらっと並べられた形をしているでしょう?

そこで、C言語ではテキストを扱う時、配列を利用することにしています。文字を保管するchar型の配列を使い、
char 配列 [] = "Hello";
こんな具合にしてテキストの値を配列に保管する、というわけです。これで、文字数に応じた要素数の配列が用意され、その中に1文字ずつ保管される、というわけです。

下のリストに、簡単な利用例をあげておきます。配列arrにテキストを保管し、これを繰り返しで出力しています。テキストを配列に保管する場合、それが何文字かによって配列の要素数は変わってきますので、「sizeof」という関数を使ってこれを調べています。この関数は、引数に配列を指定すると、その配列のデータサイズ(バイト数)を返します。charは「1つのデータ=1バイト」なので、このsizeofで何バイトあるか調べれば、何文字のデータかわかります。

実際に試してみると、ちょっと不思議な現象に気がつくでしょう。"Hello!"は6文字なのに、配列の要素数は「7」なのです。――実は、テキストをchar配列に入れて利用するとき、「どこでテキストが終わるか」という情報をきちんと用意したおかないといけないのです。メモリの中にあるchar値を順に読み込んでいくわけですが、何もしてないと「これって、どこまでがひとつのテキストのデータと考えればいいの?」ということがわからなくなってしまうでしょう?

そこで、C言語では、テキストを扱う時、その最後に「ヌル文字」という特殊な文字を入れて、「ここでこのテキストはおしまいですよ」ということを示すようにしています。このため、配列の要素は「実際の文字数+1」となるのです。

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

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

●プログラム・リスト●

#include <stdio.h>

int main (int argc, const char * argv[]) {
    char arr[] = "Hello!";
	int n = sizeof(arr);
	for (int i = 0; i < n; i++) {
		printf("%c",arr[i]);
	}
	printf(" (%i)",n);
	return 0;
}

※関連コンテンツ

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