我试图在函数中传递一个数组,然后将其打印出在数组中找到的值。
这就是我所拥有的
数字.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
main.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
打印数字(并且不返回数组的地址)。
并且,考虑到数组确实具有内置的维数意义(即,它们不知道自己的维数,最好像其他人建议的那样使用astd::vector
来代替,因为这样更安全,可以自己清理并具有与具有相似性能的C型阵列相比,它具有更多的功能/优势。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句