1、二维数组传参|传值 先给出问题:像下面这样的数组,在函数中如何传参?也就是说如何保证虚参与实参类型一致。char str_arr310 = “yes“,“no“,“uncertain“;char *str_array = “yes“,“no“,“unsure“;函数原型:void func1( char (*a)10 )void func2( char *a )调用:func1( str_arr );func2( str_array);如果向 func2()中传入 str_arr 会怎么样呢?编译器会警告:传递参数 1 (属于 func2)时在不兼容的指针类型间转换。即虚参与实参类型不一致。同
2、理,也不能向 func1()中传入 str_array。我们给出完整的测试程序:/*二维数组传参测试程序*/#include void func1( char (*a)10)int i;for(i=0;iint main()char str_arr310 = “yes“,“no“,“uncertain“;char *str_array = “yes“,“no“,“unsure“;char *str3 = “a“,“b“,“c“;int i;for(i=0;iint main()int array34;int *p = array;*/rootlocalhost ansi_c# gcc test
3、2.c test2.c: 在函数 main 中:test2.c:5: 警告:从不兼容的指针类型初始化rootlocalhost ansi_c# 虽然从本质上讲 int array34 的数组名相当于二级指针,但它不等同于一般的二级指针,因为它还含有数组相关的信息,所以在 main 函数中:char str_arr310 = “yes“,“no“,“uncertain“;for(i=0;i=0 for( i=0; ivoid f( char *a, int n)int i;printf(“%c/n“,*( (char*)a+0 ) );printf(“%c/n“,(char * )a)n );p
4、uts(“-OK“);for(i=0;ivoid f( char *a, int n)int i;printf(“%c/n“,*( a+0 ) );printf(“%c/n“,(a)n );puts(“-OK“);for(i=0;ivoid Test(char a2)int size = sizeof( a );/4int main(void)char a32 = a,b,c,d,e,f;int size =sizeof( a );/6Test( a );return 0;来源:http:/ func1(int *p,int row, int column)调用:int main()int m
5、,n;int *b;cin m;cin n;b = new int *m;for(int i=0; im; i+)bi = new intn;func1(b,m,n);return 0;我习惯的做法是不用指针数组,定义一个大块( 这种情况主要面向每行行数相同 ):比如现在有一个 W*H的矩阵(H 个长度为 W 的数组),你就直接定义一个 float 型指针: float* pfBuffer;然后动态分配大小 pfBuffer = new floatW*H;这个 buffer 在用完之后要调用 delete pfBuffer;来释放.你传递这个 float 指针,传递行列数之后,你如果要访问 y 行 x 列的话, 只要算一下它在哪儿, int addr = y*W+x;就是其“ 地址“了,你要访问它,直接使用 pfBufferaddr就 OK 了, 实际上我做图象处理的时候全部这样做,因为这样的地址访问很明了,不会给阅读带来不便, 而且作为大部分的时候, 我们用矩阵比较多,列数不等的情况很少。这只是个人见解。