No.14633![]() |
2次元配列の引渡し 投稿者---JUNE(2004/06/15 17:18:30) |
||
2次元配列の先頭アドレスを関数間で引き渡して 使用したいのですが、スマートな記述はないですか。 #include <stdio.h> void sub(char *,int) ; main(int argc,char *argv[]) { char str[4][128] ; int n ; int i,j ; for(i=1,j=0; i<argc; i++,j++) { strcpy(str[j], argv[i]) ; } n = argc - 1 ; sub((char*)str,cnt) ; とか sub(str[0],cnt) ; とか sub(&str[0][0],cnt) ; } void (char *str,int n) { } 複雑な記述よりは、上記のような分かりやすい記述 がいいのでしょうか。 |
No.14636![]() |
Re:2次元配列の引渡し 投稿者---REE(2004/06/15 17:44:18) |
||
>複雑な記述よりは、上記のような分かりやすい記述 >がいいのでしょうか。 下記のほうが単純で分かりやすいです。 #include <stdio.h> #include <string.h> void sub(char [][128],int) ; main(int argc,char *argv[]) { char str[4][128] ; int n ; int i,j ; for(i=1,j=0; i<argc; i++,j++) { strcpy(str[j], argv[i]) ; } n = argc - 1 ; sub(str, n) ; } void sub(char str[][128],int n) { } |
No.14652![]() |
Re:2次元配列の引渡し 投稿者---JUNE(2004/06/15 22:21:53) |
||
void sub(char [][128],int) ; これは void sub(char (*)[256],int) ; こう書いても同じですよね。 受け側は void sub(char str[][128],int n) ですか。 char (*z)[j]も2次元配列だですが、関数の中で、(*z)[j]機能が どうしても理解できません。 どう解釈したらよいのですか |
No.14662![]() |
Re:2次元配列の引渡し 投稿者---REE(2004/06/16 10:17:23) |
||
>void sub(char [][128],int) ; > >これは > >void sub(char (*)[256],int) ; > >こう書いても同じですよね。 はい、同じです。 引数の宣言にchar str[][128]と書いても、char (*str)[128]と書いたのと同じに解釈されます。 >受け側は >void sub(char str[][128],int n) >ですか。 もちろん void sub(char (*str)[128],int n) とも書けます。 プロトタイプ宣言と統一した方がよいでしょう。 >char (*z)[j]も2次元配列だですが、関数の中で、(*z)[j]機能が >どうしても理解できません。 >どう解釈したらよいのですか char (*z)[128] は正確には2次元配列ではなく、1次元配列へのポインタですが、zに正しい値が設定されていれば、2次元配列と同じように使えます。 (*z)[j]という表記は、z[0][j]と同じ意味になります。 |