2次元配列のポインタ – プログラミング – Home

通知
すべてクリア

[解決済] 2次元配列のポインタ


roccy
 roccy
(@roccy)
ゲスト
結合: 23年前
投稿: 82
Topic starter  

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];
は、どうなるの?


引用未解決
トピックタグ
ten_bun
 ten_bun
(@ten_bun)
ゲスト
結合: 22年前
投稿: 1
 

実際に動かしてみるのが良いよ。
ただし全角文字はマルチバイト文字なんで、そういうテストは、
ASCII文字を使ってみることですね。
もっと理解したければ、デバッガでステップを追っていって、
配列変数が指し示すアドレスを見てみれば視覚的に理解できるから。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> 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];
> は、どうなるの?

最初の質問と同じ。やってみればいい。訊くまでもありません。


返信引用
roccy
 roccy
(@roccy)
ゲスト
結合: 23年前
投稿: 82
Topic starter  

そういう決まりなんですね。
ありがとうございます。

> //Func( &str[1][0] ); // ←これが正しい
> Func( &str[0][1] ); // とならないのは、なぜでしょう?
> そういう決まりだからですか?

そういう決まりだからです。


返信引用
ku
 ku
(@ku)
ゲスト
結合: 25年前
投稿: 312
 

実際に実行してみれば分かるものは実際に実行すれば良いとして
> //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]の意味することの違いは理解しましょう


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました