void func(float* state[6], float* err[6][6]);
int main()
{
float state[6];
float err[6][6];
func(&state, &err);
return 0;
}
次の2つの宣言はどちらも同じです...
char *message = "Hello World!";
char message[13] = "Hello World!"; /* "Hello World!" is 12 chars + \0 termination */
配列はポインタであり、処理が異なります。したがって、message
これらの宣言のいずれかでのアドレスをfunc1(char *)またはfunc1(char [])に渡すには、それがアドレスを渡すと言いfunc1(message);
ます。
配列は、アドレスとして最初の値にのみ渡すことができます。次のプログラムを実行して、その事実を示します。
#include <stdio.h>
void func(float* array);
int main()
{
float state[6];
int i = 0;
printf ( "Sizeof state: %d\n", sizeof(state) );
for ( i = 0; i < 6; i ++ ) { state[i] = i+1; }
func(state);
return 0;
}
void func ( float *array )
{
printf ( "Sizeof float: %d\n", sizeof(float) );
printf ( "Sizeof array: %d\n", sizeof(array) );
printf ( "Value in array[0] = %f\n", array[0] );
printf ( "Value in *array = %f\n", *array );
array++;
printf ( "Value in array[-1] = %f\n", array[-1] );
printf ( "Value in array[0] = %f\n", array[0] );
printf ( "Value in *array = %f\n", *array );
}
したがって、への呼び出しfunc(float* state[6], float* err[6][6] );
は、2レベルのポインターと3レベルのポインターを宣言しています。同様の機能ですが、同じ呼び出しで、func(float **state, float ***err );
言うまでもなく、あなたが目指しているものではありません。