こう記述するとポインタ配列の各要素には各文字列の先頭アドレスが入り。
メモリを隙間なく使用することができますよね?
ちょっとした疑問を持ってこういうプログラムを作ってみました。
#include
main()
{
int i;
char *p[3] = {"car","bus","ship"};
for(i = 0; i < 3; i++){
printf("%d\n",p[i]);//先頭アドレスの表示
printf("%s\n",p[i]);//文字列の表示
}
}
-------------------
18657284
car
18657292
bus
18657304
ship
-------------------
となりました。
これおかしくないですかね?carとbusのメモリの差は
carと¥0で4バイトとなるはずですよね?なのになぜか8バイト
busをshipの差も4バイトのはずが12バイト・・・
試しに というプログラムを実行して見ると
-------------------------
c
a
r
b
u
s
b
u
s
s
h
i
p
s
h
i
p
-------------------------
となりました。
どういうことなんでしょうね。
p[0]とp[1]の差が8バイトなのは、なぜかp[0]内に「bus¥0」入ってるからでしょうね。
後ろの「ship¥0¥0¥0¥0」も謎です。
もしかしてポインタの仕様か何かなんでしょうか?