有问题。例如,我有一个代码
class A
{
public:
int **p;
const int size=4;
A()
{
p=new int*[size];
for(int i = 0 ; i<size;i++)
{
p[i]=new int[size];
}
for(int i = 0 ;i<size*size;i++)
{
*(*p+i)=0;
}
}
};
然后我创建类A *matrix=new A;
的动态对象
如何获得**p
的公开访问权限?
我知道它的功能如何:
int A::GetElement(int position)
{
return *(*p+position);
}
但有趣的是如何以简单的方式。我试过了matrix->*(*p+i)
,但它没有用。
答案 0 :(得分:2)
对于数组的2个索引,只需使用2个索引。
#include <iostream>
class A
{
public:
int **p;
const int size=4;
A()
{
p=new int*[size];
for(int i = 0 ; i<size;i++)
{
p[i]=new int[size];
}
for(int i = 0 ;i<size*size;i++)
{
p[i / 4][i % 4] = 16 - 1 - i;
}
}
~A()
{
for(int i = 0 ; i<size;i++)
{
delete[] p[i];
}
delete[] p;
}
};
int main(int, char**)
{
A* a = new A();
int i, j;
for(i = 0; i < a->size; i++)
{
for(j = 0; j < a->size; j++)
{
std::cout << a->p[i][j] << '\n';
}
}
for(i = 0; i < a->size; i++)
{
for(j = 0; j < a->size; j++)
{
std::cout << *(*(a->p + i) + j) << '\n';
}
}
for(int i = 0 ;i<(a->size * a->size);i++)
{
std::cout << *(*(a->p + (i / a->size)) + (i % a->size)) << '\n';
}
delete a;
}
使用指针解除引用。
std::cout << *(*(a->p + i) + j) << '\n';
但仍然需要双循环。
在单个循环中
std::cout << *(*(a->p + (i / a->size)) + (i % a->size)) << '\n';