我试图在函数中传递一个数组,然后打印出在数组中找到的值。
这是我的
数字.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/