通过引用传递一个数组,那么传递过去的到底是什么东西

来源:百度知道 编辑:UC知道 时间:2024/05/15 19:54:27
int main()
{
int a[3]={1,2,3};
void exchange(int (&a)[3]);
exchange(a);
return 0;
}
void exchange(int (&a)[3])
{
cout<<sizeof(a)<<endl;
cout<<*a<<endl;
}

输出的结果 a的长度为12
但是*a输出的确实数组第一个元素,那这个a到底是什么类型的啊
亲爱的Windっ凌风,你好,非常感谢的你的回答,我其实是初学者
我们把exchange的参数换一下,换成传递数组名,而不是数组的引用,那么传递过来的是首地址,这个大家都知道吧,但是这个时候你在exchange函数里测试一下这个传递过来的地址的长度,我测试过时4个字节,正好是一个指针变量的长度,但是用数组引用测试出来的却是12,按照你说的,传递过来的是数组的首地址,那也应该是4才对,look forward to answer

引用实际上就是给原来的变量一个新的名字,在使用时和原来的变量完全一样,就是把原来变量的地址传给引用变量,实际上两个变量指向相同的内存单元。。这里的引用&a,在使用时会指向参数,这里的参数是主程序中的数组a。这虽然两个都是a,但是注意不要混了。

因为一个int型的变量是4个字节,因为数组a里有3个,所以长度为12个字节。
*a是头地址,数组a的头地址就是a[0]啊,a[0]不就是1么

a是int指针类型,执行数组a的首地址,也即a的第一个元素的地址

给我分吧 第一次帮人回答问题
传递是指针,数组是不能整体引用的,所以不会传递数组。所以cout<<*a<<endl;的结果是数组第一个元素。至于引用,参见那个guojingcha说的。
问题的关键是那个sizeof操作符,它测试的是长度,你的命令是测试的数组的长度,当然是12了,和传递的无关,可以运行如下代码测试:
#include <iostream>
using namespace std;
int main()
{
int a[3];
cout<<sizeof(a)<<endl;
return 0;
}
结果还是12.

问题的关键我觉得不是传递的问题,是sizeof(),它在原题里测试的是数组的长度,就像字符串一样要到\0才结束测量,而在lz的补充里测试的只是一个指针,可我找不到资料,高手说下~
还有to是介词,在这里,要用ing形式,呵呵~

引用是传递地址.