配列とポインタ

今日は配列とポインタの関係だよ!

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
	char str[4] = { 'a', 'b', 'c', '\0' };
	char *p = str;
	printf( "%s, length = %lu\n", str, strlen(str) );
	printf( "str = 0x%016lX\n", (unsigned long)str );
	printf( "&(str[0]) = 0x%016lX\n", (unsigned long)&(str[0]) );
	printf( "p = 0x%016lX\n", (unsigned long)p );
	return 0;
}

実行結果
abc, length = 3
str = 0x00007FFF5FBFF900
&(str[0]) = 0x00007FFF5FBFF900
p = 0x00007FFF5FBFF900

配列の初期化にはいくつか方法があって、
今日は入れ物の数を指定して、文字列で初期化するよ。
お約束通り、入れ物の数は文字数+1で、最後尾には’\0’を入れるよ。
文字数を取得する関数strlenは、’\0’が見つかるまで数えてくれるんだけど、
‘\0’が見つからないと大変なことになるから注意してね。

今回覚える新しいことは、
配列というのは連続した入れ物なんだけど、
添字([0]とか[1]とか)を付けないで使うと、
最初の入れ物の住所が取得できるよ。
住所が取得できるということは、住所専用の入れ物に入れることができるよ。
そして、もう一つだいじなことは、
添字を付けないことで取得できる住所と、
最初の入れ物の住所は同じということだよ。
これは、最初の入れ物の住所を取得するには、
変数名に[0]と&を付けて取得する方法と、
添字も&も付けないで取得する方法があるけど、
その住所を格納した入れ物自体は存在しないことを意味してるよ。

ちょっと、難しかったかな。
でも、これ以上難しいことは出てこないから安心してね。

Leave a Comment