在学校里,我们的讲师告诉我们,当我们将整个数组传递给函数时,整个数组都是通过引用传递的。
但是,最近我读了一本书。它表示在将整个数组传递给函数时,默认情况下通过指针传递数组。该书进一步提到“通过指针传递与通过引用传递非常相似”,这意味着通过指针传递和通过引用传递实际上是不同的。
似乎不同的消息来源表达了不同的看法。
所以我的问题是:在C ++中,当我们将整个数组传递给函数时,数组是通过引用传递还是通过指针传递?
例如:
void funcA(int []); //Function Declaration
int main()
{
int array[5];
funcA(array); //Is array passed by ref or by pointer here?
}
最糟糕的是,您的讲师是错误的。充其量,他只是在简化术语,并使您在过程中感到困惑。不幸的是,这在软件教育中相当普遍。事实是,很多书也都错了。数组根本没有“通过”,无论是“通过指针”还是“通过引用”。
实际上,由于旧的C语言限制,无法按值传递数组,因此数组作为函数参数会发生一些特殊的魔术。
函数声明:
void funcA(int[]);
默默翻译为以下内容:
void funcA(int*);
当你写这个:
funcA(myArray);
它被静默翻译为以下内容:
funcA(&myArray[0]);
结果是您根本没有传递数组。您将指针传递给它的第一个元素。
现在,在某些抽象/简化级别上,您可以称其为“通过指针传递数组”,“通过引用传递数组”甚至“将数组的句柄传递”,但是如果您要使用C ++术语进行讨论,这些短语都不准确。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句