C++数组的引用作函数参数的问题

图片说明
C++数组的引用作参数时,此参数是个指针还是数组本身。如:
void test ( int (&arr)[4] ) // 该函数的参数是一个整型数组的引用,数组有4个元素
{
sizeof(arr); // vs2010调试显示sizeof是4(32位是4,64位是8,貌似当作指针了)
int nSize = sizeof(arr); // 但实际输出显示的是16,是数组本身大小
cout << nSize << endl;
}
void main()
{
int arr[4];
test( arr );
}

问题是:数组的引用作参数,是否被当作数组本身使用,输出的大小是16,为什么调试时看是4,test函数中的arr大小到底应该是多少。

对编译期长度确定的数组,指向数组的引用可以作为参数传递,此时传递的是数组本身。
sizeof(arr)值应为数组大小16。
至于sizeof(arr); 调试时显示为4,可能是运行时中间值。

这里我也有疑问,现在学习了,谢谢!

首先结果是16这个是确定的。这个在编译的时候已经确定。
使用vc6 生成汇编的一句话。
; 11 : int ret = sizeof(arr);

mov DWORD PTR _ret$[ebp], 16        ; 00000010H

调试显示时,arr本身具有地址属性,因此sizeof(arr)=4,也就是说调试器程序识别和上下文无关。