能编译通过不代表形参说明就正确.
C选项的错误在于,C内置数组做函数参数是不进行范围检查的.
所以int a(float x[10],int n)这种定义只相当于
int a(float *x,int n)
定义成int a(float x[10],int n)只能给人一种错觉,传递给a函数的第一个参数是一个大小为10的内置数组.实际不然.另外一个很重要的缺点在于这种错觉很可能导致修改x本身的值,即数组x的起始地址.
比如下面的代码(C++的原理上是一样的)
#include
using namespace std;
void show(int n[10])
{
for(int i=0; i<10; ++i)
{
cout<<*n++<
}
int main()
{
int n[10] = {0,1,2,3};
show(n);
return 0;
}
表面上show函数显示数组n[10]的内容,实际上运行完以后数组n的起始已经变成原先的n[9]的地址.这数组已经是一颗定时炸弹了.
数组本身是定义为一个const 指针的.比如定义数组in n[10];则n的保存是数组首元素地址.并且属性于只读,不可修改,对于试图修改n值的代码编译器会给出错误.比如直接写如下代码,则编译器报错.
#include
using namespace std;
int main()
{
int n[10] = {0,1,2,3};
for(int i=0; i<10; ++i)
{
cout<<*n++<
return 0;
}
经过验证,全部通过编译,所以答案是错的,你是对的
:
应该是都对的。
保险起见,还是做个测试吧。事实胜于雄辩。
咯咯没错
我觉得也都对.