#include<iostream>
using namespace std;
void process_2d(int *a, int n, int m)
{
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
a[i*m+j] = 0;
}
template<int n, int m>
inline void process(int (&ary)[n][m])
{
process_2d(&ary[0][0], n, m);
}
int main()
{
int a[2][4]={{1,2,3,4},{2,4,6,5}};
process(a);
for (int i = 0; i < sizeof(a)/sizeof(a[0]); ++i)
{
for (int j = 0; j < sizeof(a[0])/sizeof(a[0][0]); ++j)
cout<<*(a[i]+j)<<" ";
cout<<endl;
}
return 0;
}
该篇文章主要研究的是 void process(int (&ary)[n][m]),这样写的好处在于数组形参边界不会忽略,像以前都是这样写的void process(int **ary,int n,int m) n和m分别是数组边界灵活性太低。所以我们大可以充分发挥C++泛型编程的优势利用模版,例如下面
template<int n, int m>
inline void process(int (&ary)[n][m])
{
//.......
}
如果我们要调用process(int (&ary)[n][m]),我们只要给它传递数组名就行,编译器会帮我们判断n,m,例如 process(a)。