c++ - 返回指向数组的指针或使用参数创建 void 函数

标签 c++ pointers multidimensional-array

到目前为止,我大部分时间都在使用返回数组指针的函数,但现在我开始使用引用数组的 void 函数,所以我想知道下面哪一个代码更好用,为什么?

void doSomething(int** &ary)
{
    ary = new int*[3];
    for (int i = 0; i < 3; ++i)
        ary[i] = new int[3];
    ary[0][0] = 1;
    ary[0][1] = 2;
}

int** ary=NULL;
doSomething(ary);

或者这个

int** doSomething1()
{
    int **ary = new int*[3];
    for (int i = 0; i < 3; ++i)
        ary[i] = new int[3];
    ary[0][0] = 1;
    ary[0][1] = 2;
    return ary;
}

int **ary1=doSomething1();

最佳答案

这是一个意见问题,但是,这是我的意见:

我认为返回指针的版本更好。为什么?仅仅是因为它使调用站点不那么神奇。使用 return 变体,您可以像这样调用函数:

int** my2dArray = doSomething();

很明显,my2dArray 被初始化为指向函数提供的某个数组。 没有看函数定义。

另一方面,电话

int** my2dArray;
doSomething(my2dArray);

应该始终为读者敲响警钟:看起来好像您正在将未初始化的指针传递给函数。即使在查找函数定义并看到指针通过引用传递之后,读者仍然不能确定该函数不解释传入的值。需要仔细查看代码以确保这个电话确实是合法的。

因此,为了便于调试,我避免传递引用参数。我按值传递,我按 const 引用(它与按值传递具有相同的语义)传递,或者我按显式指针传递。这样,任何函数调用都不能修改在调用站点上不明确可见的值。

关于c++ - 返回指向数组的指针或使用参数创建 void 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27078482/

相关文章:

ios - 从 nsdata 获取字节附加额外的垃圾字符

java - 在java中将文件导入到二维数组

c++ - OpenCV flann.h 断言错误

c++ - AVX2 中排序数组的高效稳定总和

c++ - 如何仅在定义时才调用 C++11 模板中的函数

java - 如何在另一种方法中使用一种方法的变量?

angular - 错误 : Cannot find a differ supporting object '[object Object]' of type 'object' Angular 6

c++ - 此模板代码中的错误 "Expected Expression"

c - 用指针理解 C 宏

c++ - 是否对未指向序列未定义行为中的元素的指针递增/递减或添加整数值?