C ++数组是通过引用还是通过指针传递的?

用户名

在学校里,我们的讲师告诉我们,当我们将整个数组传递给函数时,整个数组都是通过引用传递的。

但是,最近我读了一本书。它表示在将整个数组传递给函数时,默认情况下通过指针传递数组。该书进一步提到“通过指针传递与通过引用传递非常相似”,这意味着通过指针传递和通过引用传递实际上是不同的。

似乎不同的消息来源表达了不同的看法。

所以我的问题是:在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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

指针并通过引用传递c ++

来自分类Dev

C ++:通过引用传递(指针指向?)对象数组

来自分类Dev

通过引用在C中传递指针

来自分类Dev

用C填充数组:创建静态局部变量还是通过指针传递数组更好?

来自分类Dev

C ++:通过函数传递指针数组的语法

来自分类Dev

使用C中的指针通过引用传递和更改数组

来自分类Dev

通过引用传递数组并修改值C ++

来自分类Dev

在C中通过引用传递多维数组

来自分类Dev

在C中通过引用传递数组

来自分类Dev

C ++通过引用传递位域数组

来自分类Dev

在C中通过引用传递多维数组

来自分类Dev

在C ++中通过引用传递数组

来自分类Dev

在C中通过引用传递数组

来自分类Dev

C ++如何通过引用函数传递数组

来自分类Dev

通过引用和c中的指针传递参数

来自分类Dev

为什么不能在C中通过引用传递指针?

来自分类Dev

c如何通过引用传递指针并增加值

来自分类Dev

C ++通过引用传递静态数组和动态数组

来自分类Dev

通过C中的指针传递的2D数组

来自分类Dev

C通过指针传递动态数组(分段故障)

来自分类Dev

在数组中移动指针-通过引用还是增量传递?

来自分类Dev

在C中通过指针传递

来自分类Dev

通过函数c传递指针

来自分类Dev

C#通过引用传递值类型数组的元素

来自分类Dev

如何在C ++中通过引用传递数组元素?

来自分类Dev

在C中通过引用传递二维数组

来自分类Dev

通过C ++中的引用传递未签名的char数组

来自分类Dev

通过引用数组传递给C ++中的模板函数

来自分类Dev

C ++类:通过引用传递