使用指针获取二维数组的元素

时间:2015-03-29 09:00:08

标签: c++ class pointers

有问题。例如,我有一个代码

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),但它没有用。

1 个答案:

答案 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';