使用函数返回数组 - c ++

时间:2013-11-03 04:19:51

标签: c++

我正在尝试在函数中传递一个数组,然后将其打印出数组中的值。

这就是我所拥有的

numbers.cpp

#include <iostream>
#include <string>
#include "numbers.h"

int * numbers::printNumbers()    {

    for (int i=0; i<3; i++) {
        for (int j=0; j<3; j++) {
            arrayOne[j] =i;
        }
    }
    return arrayOne;
}

numbers.h

#ifndef try_numbers_h
#define try_numbers_h
#include <iostream>
#include <string>

class numbers   {

public:

      int * printNumbers();

private:

      int arrayOne[4];
};

#endif

的main.cpp

#include <iostream>
#include <string>
#include "numbers.h"

int main () {
    numbers printNum;
    int * p;
    p = printNum.printNumbers();

}

上面显示的代码,成功运行

但我的输出正在返回一些奇怪的内存地址

输出

0x7fff5fbff8e0 

右边应输出

期待输出

0
1
2
3

2 个答案:

答案 0 :(得分:1)

您的代码是正确的。

它正在打印的内存地址是类变量arrayOne的开头的地址。你之所以看到这个而不是:

0
1
2
3

这是代码:

numbers printNum;
int * p;
p = printNum.printNumbers();

仅被分配了数组arrayOne地址,而不是其内容的

这给我们带来了另一个问题:您没有看到任何输出,因为您打印出每个数组索引处的数据(如代码所示)。

为此,您应该将指针迭代到数组 arrayOne并输出它们,以便查看/验证您的预期结果。

但是,由于您当前的方法违反了最少惊喜的原则(因为您的方法的名称是printNumbers(但不打印数字并返回数组的地址),那么它是一个好的想要重构代码,以便函数printNumbers打印数字(并且不返回数组的地址)。

并且,鉴于数组确实具有内置的维度感(即他们不了解自己的维度,因此其他人建议使用std::vector代替它会更好,因为这样更安全,自我清理后,与具有类似性能的C-Style阵列相比,具有更多的功能/优势。

答案 1 :(得分:0)

您可以将arrayOne公开,printNumbers()无效。然后在main.cpp中执行以下操作:1)执行函数printNum.printNumbers() 2)分配给p您的printNum.arrayOne。 希望这有帮助!