大家都知道
void func(int arr[]);与void func(int arr[3]);都等价于void func(int *arr);
但是
void func(int (*arr)[])和void func(int (*arr)[3]);都等价于void func(int **arr);么?
1. g++ 3.4.2上的试验结果:
void func(int (*arr)[]);是非法的,要求给出具体维数;
void func(int (*arr)[3]);是合法的,但是并不等价于void func(int **arr);,因此不可以把"int **"类型的变量作为参数来调用func。
2. vs2003上的试验结果:
void func(int (*arr)[]);是合法的,等价于void func(int **arr);,因此可以把"int **"类型的变量作为参数来调用func;
void func(int (*arr)[3]);是合法的,但是不等价于void func(int **arr);,因此不可以把"int **"类型的变量作为参数来调用func。
个人比较倾向于g++的实验结果,觉得更合理一些......
本文探讨了C语言中指针数组与数组指针的区别,通过不同编译器上的实验结果对比,揭示了voidfunc(int(*arr)[])与voidfunc(int(*arr)[3])的具体含义及使用限制。
2763

被折叠的 条评论
为什么被折叠?



