求救,关于指针转换的问题。
假如有一个函数:
void test(int *p, int n){}
其中p指向一片有n*n个整型元素的内存,在这个函数中,我应该如何转换指针p,才能像操纵二维数组那样,来操纵这片内存?
就像这种形式来访问其中的元素a[1][2]。
先谢谢了~
[解决办法]
换一个形式:
void test(int *p, int n)
{
#define p(i,j) p[i+n*j]
for (int i=0; i <n; i++) {
for (int j=0; j <n; j++) {
p(i,j) = i+ j; //这个与FORTRAN二维数组访问语法一样了:)
}
}
#undef p(i,j)
}
[解决办法]
有一个笨点的办法能满足楼主需求: 重载 "[] "操作符.
class TwoDim
{
public:
TwoDim(int *p, int n) :m_ptr(p), m_nDim(n){};
int* operator[] (int k) {return m_ptr + m_nDim*k;};
private:
int *m_ptr;
int m_nDim;
};
void test(int *p, int n)
{
TwoDim a(p,n);
// now a[5][3] means p(5*n + 3)
...
}
[解决办法]
其实如果真的只想用纯二维数组的形式访问的话,基本上只能用重载了,因为传进来的只能是指针,而用的就是下标操作符,似乎不能用别的有效的方法了。