C言語の質問です。
char str[3][32]={あいう,かきくけ,さし};
と宣言し、
文字列「かきくけ」のポインタをある関数に渡したいとき、
Func( str[1] );
これであってます?
これが、
char str[32][32]={あいう,かきくけ,さし};
の場合に、
文字列「かきくけ」のポインタが、
//Func( &str[1][0] ); // ←これが正しい
Func( &str[0][1] ); // とならないのは、なぜでしょう?
そういう決まりだからですか?
あと、余談ですが5次元配列とかあるのですか?
str[2][2][2][2][2]={1,2, ・・・32};
str[1][0][0][0][0];
は、どうなるの?
実際に動かしてみるのが良いよ。
ただし全角文字はマルチバイト文字なんで、そういうテストは、
ASCII文字を使ってみることですね。
もっと理解したければ、デバッガでステップを追っていって、
配列変数が指し示すアドレスを見てみれば視覚的に理解できるから。
> Func( str[1] );
> これであってます?
void Func(const char* s) {
printf([%s]\n, s);
}
とかやって試してみればいい。訊くまでもありません。
> //Func( &str[1][0] ); // ←これが正しい
> Func( &str[0][1] ); // とならないのは、なぜでしょう?
> そういう決まりだからですか?
そういう決まりだからです。
> あと、余談ですが5次元配列とかあるのですか?
> str[2][2][2][2][2]={1,2, ・・・32};
> str[1][0][0][0][0];
> は、どうなるの?
最初の質問と同じ。やってみればいい。訊くまでもありません。
そういう決まりなんですね。
ありがとうございます。
> //Func( &str[1][0] ); // ←これが正しい
> Func( &str[0][1] ); // とならないのは、なぜでしょう?
> そういう決まりだからですか?
そういう決まりだからです。
実際に実行してみれば分かるものは実際に実行すれば良いとして
> //Func( &str[1][0] ); // ←これが正しい
> Func( &str[0][1] ); // とならないのは、なぜでしょう?
これは決まりだからとか関係なく、理解しないとだめだよ
char str[3][32]={abc,def,ghi};
printf(%s\n, &str[1][0]);
printf(%s\n, &str[0][1]);
などとやって
&str[1][0]の意味することと、&str[0][1]の意味することの違いは理解しましょう