带有解引用指针的C ++填充数组

时间:2017-01-07 16:34:52

标签: c++ pointers reference

根据我在this问题中发现的一系列参考文献是非法的。我是C ++的新手,正在玩指针和解除引用,以下代码似乎执行得很好。

#include <iostream>
#include <cstdlib>

using namespace std;

struct A
{
    int data1;
    int data2;

    A (void) : data1(0), data2(0) {}

    // many more datas
};

int main()
{
    cout << "test start" << endl;

    A *a = new A();
    A arr[100];

    for (int x=0; x<100; x++) arr[x] = *a;

    cout << "test done" << endl;
}

引擎盖下发生了什么?是放在a的每个位置的array对象的副本?如果是这样,当从类似函数返回对象引用时:

A &function (void) { return &A(); }

它和它一样吗?:

A function (void) {return A();}

1 个答案:

答案 0 :(得分:0)

对于第一个问题,arr[x] = *a;会导致程序将存储在对象中的所有数据复制到指定的数组元素。

对于第二个问题,A &function (void) { return &A(); }似乎试图返回函数的地址,但格式不正确。查找“指向函数的指针”以获取更多信息。但是,你可以这样做:

A test;

A &function(void)
{
    return test;
}

A &ref = function();

这样,您的程序中有一个可以在引用中使用的实际对象,并且您的函数将返回该对象的地址。这似乎是你试图用这个特定功能做的事情。

编辑:删除了错误的答案部分。 A function(void) { return A(); } 创建一个对象并返回创建的对象。

Edit2:在return &test;中将return test;更改为A &function()