使用函数返回数组-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

main.cpp

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

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

}

上面显示的代码成功运行

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

输出

0x7fff5fbff8e0 

就应该输出

期望输出

0
1
2
3
jrd1

您的代码是正确的。

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

0
1
2
3

这是这段代码:

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

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

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

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

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

并且,考虑到数组确实具有内置的维数意义(即,它们不知道自己的维数,最好像其他人建议的那样使用astd::vector来代替,因为这样更安全,可以自己清理并具有与具有相似性能的C型阵列相比,它具有更多的功能/优势。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章