2次元配列で参った続き
#include <stdio.h>
//void print3x3Matrix(const long m[][3])
void print3x3Matrix(const long (*m)[3])
{
printf( "--- matrix ---\n" );
printf( "%3ld, %3ld, %3ld\n", m[0][0], m[0][1], m[0][2] );
printf( "%3ld, %3ld, %3ld\n", m[1][0], m[1][1], m[1][2] );
printf( "%3ld, %3ld, %3ld\n", m[2][0], m[2][1], m[2][2] );
}
int main(int argc, char *argv[])
{
long matrix[][3] = {
{ 0, 1, 2 },
{ 10, 11, 12 },
{ 20, 21, 22 }
};
print3x3Matrix( (const long (*)[])matrix );
return 0;
}
結局、分かったことはこんな感じ。
引数の書き方として、3行目と4行目はどちらも同じということ。
関数を呼ぶときに、const付きでキャストしてあげれば、
警告はでないということ。
vcだとでないけど、gccだと出るということ。
(確かに、普段はVC9だけど見た事がない。)
char **をconat char **を引数に取る関数に渡しても、
同様の警告がでるらしい。
詳しくは「C言語 FAQ 日本語訳」を読むと良いと思う。
(リンクしても良いのか判断しかねたので、検索してください。)
という訳で、Cコンパイラさんは、ルールにのっとって警告しているだけで、
この点に関しては、ユーザーの判断でキャストするのが良さそうです。
ちなみに、long (*m)[3]とlong *m[3]は意味が違うから気を付けてね。
おしまい。
Leave a Comment