C++使用取消引用的指针填充数组

C++ filling array with dereferenced pointers

本文关键字:指针 填充 数组 引用 取消 C++      更新时间:2023-10-16

根据我在这个问题中发现的,一系列引用是非法的。我对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();}

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

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

A test;
A &function(void)
{
    return test;
}
A &ref = function();

这样,程序中有一个可以在引用中使用的实际对象,并且函数将地址返回给该对象。 这似乎是您尝试使用该特定功能执行的操作。

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

编辑2:A &function()年将return &test;更改为return test;