要将二维数组作为函数的参数,就必须将数组名视为指针来传递.例如我们以二维数组 int data[3][4] 作为例子.
要将data传递给函数,其函数声明方法有2种:
1 void function(int (*data)[4] , int size)
这个函数声明参数中 int (*data)[4]的意识是data是一个指针他指向一个有4个int值的数组.后面的int size则是数组的行数了.
2void function(int data[][4],int size)
与前一种意义相同,但可读性更强(顺带提一下[]结合方向从左到右).
一个简单的代码如下:
#include<iostream>
using namespace std;
void sum(int (*sum)[4],int size);
void sum2(int sum[][4]);
int
main()
{
int a[3][4]={ {1,2,3,4},{5,6,7,8},{9,10,11,12}};
/*输出 a sizeof is 48 */
/*sizeof()一个运算符,在编译阶段实现其功能,因此 a的类型是数组所以其大小为3*4*4 .int大小为4bytes*/
cout<<"a sizeof is "<< sizeof(a)<<endl;
cout<<"int is "<<sizeof(int)<<endl;
/* 输出 为 a+1 is 5 */
/*指针加一不是内存地址+1,而是加上指针所指向数据类型加1.那么就看乐意知道a所指向的类型是有4个int值的数组*/
cout<<"a+1 is "<< **(a+1)<<endl;
sum(a ,3);
sum2(a);
}
void
sum(int (*sum)[4] , int size)
{ int *ptr;
cout<<"int * is "<<sizeof(ptr)<<endl;
/* (*sum)[4] sizeof is 8 */
/* 从 8 就可以看出在子函数中sum的类型就是一个指针而不在被解释为一个数组了*/
cout<<"(*sum)[4] sizeof is"<<sizeof(sum)<<endl;
cout<<"sum+1 is "<<**(sum+1)<<endl;
;}
void
sum2(int sum[][4])
{ cout<<"sum[][4] is "<<sizeof(sum)<<endl;
}
老实说自学的, 感觉很多还是懵懂的如果有错误希望大家指正,谢谢.