C言語関係掲示板

過去ログ

No.1149 2次元配列の引渡し

[戻る] [ホームページ]
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]と同じ意味になります。