配列とポインタ
今日は配列とポインタの関係だよ!
#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