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

use*_*460 5 c++ arrays pointers reference function

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

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

看来不同来源的说法不同.

所以我的问题是:在C++中,当我们将整个数组传递给函数时,是通过引用还是通过指针传递的数组

例如:

void funcA(int []); //Function Declaration

int main()
{
    int array[5];
    funcA(array); //Is array passed by ref or by pointer here?
}
Run Code Online (Sandbox Code Playgroud)

Lig*_*ica 14

最糟糕的是,你的讲师错了.充其量,他正在简化术语,并在此过程中让您感到困惑.不幸的是,这在软件教育中相当普遍.事实是,很多书也错了; 数组不是"通过","通过指针"或"通过引用".

事实上,由于旧的C限制,数组不能通过值传递,因此数组作为函数参数会发生一些特殊的魔法.

功能声明:

void funcA(int[]);
Run Code Online (Sandbox Code Playgroud)

被默默地翻译成以下内容:

void funcA(int*);
Run Code Online (Sandbox Code Playgroud)

当你写这个:

funcA(myArray);
Run Code Online (Sandbox Code Playgroud)

它被默默地翻译成以下内容:

funcA(&myArray[0]);
Run Code Online (Sandbox Code Playgroud)

结果是你根本没有传递数组; 你将指针传递给它的第一个元素.

现在,在某些抽象/简化级别,您可以将其称为"通过指针传递数组","通过引用传递数组"或甚至"将句柄传递给数组",但如果您想用C++语言进行交谈,这些短语都不准确.

  • @Melkon:不,错.数组是数组是数组._Arrays不是指针._ (6认同)
  • @Melkon [数组不是指针](http://stackoverflow.com/questions/4810664/). (6认同)
  • @Melkon:不,不,不是.这是一个数组.数组到指针的衰减只发生在一些非常明确的情况下. (3认同)