C言語関数が二次元配列を伝達する方法

1170 ワード

c言語では、関数を介して2次元配列を伝達する必要があることがよくあります.以下の3つの方法があります.
方法1.パラメータは2次元の長さを与える.
例:
#include <stdio.h>
void func(int n, char  str[ ][5] )
{
 int i;
 for(i = 0; i < n; i++)
  printf("/nstr[%d] = %s/n", i, str[i]);
}

void main()
{
 char* p[3];
 char str[][5] = {"abc","def","ghi"};
 func(3, str);
}

メソッド2では、パラメータは配列を指すポインタとして宣言されます.
例:
#include <stdio.h>
void func(int n, char  (*str)[5] )
{
 int i;
 for(i = 0; i < n; i++)
  printf("/nstr[%d] = %s/n", i, str[i]);
}

void main()
{
 char* p[3];
 char str[][5] = {"abc","def","ghi"};
 func(3, str);
}

方法3、
パラメータはポインタとして宣言されたポインタです.
例:
#include <stdio.h>
void func(int n, char **str)
{
 int i;
 for(i = 0; i < n; i++)
 printf("/nstr[%d] = %s/n", i, str[i]);
}
void main()
{
 char* p[3];
 char str[][5] = {"abc","def","ghi"};
 p[0] = &str[0][0];
 p[1] = str[1];
 p[2] = str[2];
 func(3, p);
}

リファレンス
http://blog.csdn.net/sarsjapanese/article/details/1478545