在下面的示例中,两个函数返回相同的结果。有人可以解释一下两者之间的区别吗?
#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;
}
在func2中,int a [4]
第一个将接受任何类型,但要引用由4个int元素组成的数组,而第二个将接受指向int的指针或未指定int大小的数组,因为它将作为数组传递。
数组的名称表示该数组的起始地址。这意味着它是一个指针。即int b[4]
等于int* b
。因此,当您执行std::cout<<b;
和std::cout<<&b
时,它们是数组的输出起始地址,在我的情况下是0x7f949eaf2030
。因此,从技术上讲,您在两种情况下都执行相同的操作。同样,在处理一维数组时,您无需在函数中提及数组的大小,即[]
void foo(int arr[])
{
std::cout<<arr[3];
}