首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

,关于指针转换的有关问题

2012-02-07 
求救,关于指针转换的问题。假如有一个函数:voidtest(int*p,intn){}其中p指向一片有n*n个整型元素的内存,在

求救,关于指针转换的问题。
假如有一个函数:
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)
...
}

[解决办法]
其实如果真的只想用纯二维数组的形式访问的话,基本上只能用重载了,因为传进来的只能是指针,而用的就是下标操作符,似乎不能用别的有效的方法了。

热点排行