将数组传递给函数,这两种方法有什么区别?

问题描述 投票:2回答:3

在下面的示例中,两个函数返回相同的结果。有人可以解释一下两者之间的区别吗?

#include <iostream>

void func1( int (&a)[4]) {
    int b = a[3];
    std::cout << b << std::endl;
}

void func2( int a[4]) {
    int b = a[3];
    std::cout << b << std::endl;
}

int main()
{
    int b[4] = {3,2,3,4};
    func1(b);
    func2(b);
    return 0;
}
c++
3个回答
1
投票

在func2中,int a [4]


0
投票

第一个将接受任何类型,但要引用由4个int元素组成的数组,而第二个将接受指向int的指针或未指定int大小的数组,因为它将作为数组传递。


0
投票

数组的名称表示该数组的起始地址。这意味着它是一个指针。即int b[4]等于int* b。因此,当您执行std::cout<<b;std::cout<<&b时,它们是数组的输出起始地址,在我的情况下是0x7f949eaf2030。因此,从技术上讲,您在两种情况下都执行相同的操作。同样,在处理一维数组时,您无需在函数中提及数组的大小,即[]

void foo(int arr[])
{
std::cout<<arr[3];
} 
© www.soinside.com 2019 - 2024. All rights reserved.