質問: 0; i < 3; i++) { printf("%p str[%d]: %s アドレス:%p\n", ***str+i***, i, ***str[i]***, *(str+i)); } return 0; } どうぞよろしくお願いします。
回答: こんにちは。 > > どちらの記述も同じ意味ではないのでしょうか? > > > 意味は微妙に異なります。 `str[i]`は`char*`型です。`str+i`は`char**`型です。 例えば、`int foo[];`は`int`型の配列ですので、`foo`は通常`int*`型になります。 これと同じく、`char* str[];`は`char*`型の配列ですので、`str`は`char*`型に`*`が付いた型`char**`となるのです。 そして、書式指定子%sは`char*`型を期待しているので、そこに`char**`型を与えると親切なコンパイラなら警告してくれます。