C++指针数组

Tho*_*mas 22 c++ arrays pointers

在C++中,如果我想要一个指针数组,以便我可以让它们在后一阶段指向不同的对象,那么语法是什么样的.

编辑

我想澄清一下我想做什么.我有一个类foo,它有和添加方法.在add方法中,我引用了类bar.我想将该引用保存到bar的指针数组中.指针栏数组需要一直扩展,这样我就没有问题了.它是在指针堆上创建和数组,以便我稍后可以为它们分配bar对象.我试过的似乎失败了,因为类bar没有编译器抱怨的默认构造函数.这让我想到我正在创建一些我不想做的实际对象.

请不要,我不想听到你认为这是多么疯狂等等,这是你的意见.

Joe*_*ams 54

你想要的是:

Foo *array[10]; // array of 10 Foo pointers
Run Code Online (Sandbox Code Playgroud)

不要混淆:

Foo (*array)[10]; // pointer to array of 10 Foos
Run Code Online (Sandbox Code Playgroud)

在任何一种情况下,都不会自动初始化任何内容,因为它们表示尚未分配给某些东西的Foos指针(例如,使用new).

当我意识到它描述了你如何访问基类型时,我终于在C中"得到"了指针/数组声明语法. Foo *array[5][10];意味着*array[0..4][0..9](5项的数组下标上,然后下标的10个项目,然后解除引用的指针阵列上)将访问Foo对象(注意,[]具有优先级高于*).

这似乎是倒退.你会认为int array[5][10];(aka int (array[5])[10];)是一个10的数组int array[5].假设是这种情况.然后你会通过说来访问数组的最后一个元素array[9][4].这不是倒退吗?因为C数组宣言是使用阵列不必被flipflopped指示如何获取到基型(而不是数组表达式的组合物等可以预期)的图案中,数组声明和代码.

  • 对于此问题的未来访问者:您可以使用[这样的工具](http://cdecl.org/)将这些声明转换为类似于英语的内容,以便更好地理解变量的声明方式. (9认同)

Nav*_*een 7

例如,如果你想要一个int指针数组int* a[10].这意味着变量a是10 int*秒的集合.

编辑

我想这就是你想要做的:

class Bar
{
};

class Foo
{
public:

    //Takes number of bar elements in the pointer array
    Foo(int size_in);

    ~Foo();
    void add(Bar& bar);
private:

    //Pointer to bar array
    Bar** m_pBarArr;

    //Current fee bar index
    int m_index;
};

Foo::Foo(int size_in) : m_index(0)
{
    //Allocate memory for the array of bar pointers
    m_pBarArr = new Bar*[size_in];
}

Foo::~Foo()
{
    //Notice delete[] and not delete
    delete[] m_pBarArr;
    m_pBarArr = NULL;
}

void Foo::add(Bar &bar)
{
    //Store the pointer into the array. 
    //This is dangerous, you are assuming that bar object
    //is valid even when you try to use it
    m_pBarArr[m_index++] = &bar;
}
Run Code Online (Sandbox Code Playgroud)