数组中参数值的问题

来源:百度知道 编辑:UC知道 时间:2024/06/04 10:10:34
代码:
#include <iostream>
using namespace std;
void ceshi(int a[5])
{
cout<<*a<<endl;

}
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,20};
ceshi(a);
return 0;
}
形参a[5]中那个5换成任意数字都可以,那么5不读入内存没有任何意义?

在ceshi中,a[5]指出了你的数组大小为5,而cout<<*a因为必然是第一个元素,所以没区别,同时数组的传递就只是首地址的传递,也就是说你把你在main函数中的数组的地址给了你的形参,因此你就获得了这个数组,但是其实是有一个区别的,就是你分别在ceshi和main中sizeof(a)就明白了,看到了么?事实上形参里面的a[5]只是说明这个数组的首地址,后面没有任何操作,即数组不进行赋值,它只是把实参的首地址传递给形参,同时对于二维数组又有一些特别,就是必须给偏移,但是和这个问题无关,总的来说,你这个问题的关键就是:明白数组不的复制就是传递首地址,所以int a[5]等价于int*a(二维数组有些不同);

形参中用数组格式而不用指针格式,只不过是表明该参数的对应实参为数组(指针),其元素范围没有实际意义,但是,别将其书写为负数~~~~

你说得没错哈
在数组当参数传递时,编译器会自动将其理解为一个指针,本题就将其理解为一个指向整数的指针:int * a;
其中的5确实没有什么意义,但是在阅读代码时会给人一种清晰的感觉哈