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

标签 c++

我试图在函数中传递一个数组,然后打印出在数组中找到的值。

这是我的

数字.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;
}

数字.h

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

class numbers   {

public:

      int * printNumbers();

private:

      int arrayOne[4];
};

#endif

主要.cpp

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

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

}

如上代码,运行成功

但是我的输出返回了一些奇怪的内存地址

输出

0x7fff5fbff8e0 

按理说应该输出

期待输出

0
1
2
3

最佳答案

您的代码是正确的。

它打印的内存地址是类变量arrayOne的开始地址。你看到那个而不是的原因:

0
1
2
3

是不是这段代码:

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

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

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

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

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

而且,考虑到数组在其中确实具有内置的维度感(即它们不知道自己的维度,所以其他人建议使用 std::vector 相反,因为它更安全,可以自行清理,并且比具有类似性能的 C 样式数组具有更多的功能/优势。

关于c++ - 使用函数返回数组 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19749778/

相关文章:

c++ - xcode中的对象字节对齐

c++ - 删除不同位置的指针会导致不同的行为(崩溃与否)

c++ - 如何在 C++ 中模拟 NSData 对象?

c++ - 如何在代码库中查找未引用的类

c++ - C++中的基本文件处理,EOF检测

c++ - 给定字符串中反向单词的测试用例

c++ - 如何在Qt5中播放声音(移植Qt4)?

c++ - 小四元数相机错误? (在 Z 轴上略微旋转)

c++ - 为什么一个语句调用复制构造函数,而另一个语句调用复制赋值运算符?

c++ - 如何在 Visual Studio 2010 中自动折叠某些注释?