1

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

这就是我所拥有的

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

主文件

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

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

}

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

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

输出

0x7fff5fbff8e0 

按理它应该输出

期望输出

0
1
2
3
4

2 回答 2

1

你的代码是正确的。

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

0
1
2
3

是不是这段代码:

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

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

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

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

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

并且,鉴于数组确实具有内置的维度感(即它们不知道自己的维度,最好使用其他人建议使用 astd::vector代替,因为这样更安全,可以自行清理,并且具有与具有相似性能的 C 样式数组相比,具有更多功能/优势。

于 2013-11-03T04:28:44.977 回答
0

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

于 2013-11-03T04:29:00.977 回答