我们来写一个函数:
void fun(int a[10]) {
int i=0;
for( ; i<10; i++ ) {
cout << a[i] << “ “;
}
}
我们的本意是想让函数,只能接受10个元素的数组,但却是错误的.原因是编译器会忽略数组长度,所以以上写法,等同于以下写法:
void fun(int *a) {}
void fun(int a[]) {}
即,我们调用如下:
void main() {
int *a[2],*b,c;
fun(a);
fun(b);
fun(&c);
}
如此的调用方法是合法的,那么必然引起程序错误,甚至引起程序崩溃,这取决于访问越界的内存中存的是什么值.
如果我们想让程序只接收实参传过来的特定参数,那么,就要使用引用.
void fun(int (&a)[10]) {
int i=0;
for( ; i<10; i++ ) {
cout << a[i] << “ “;
}
}
这样的话,就可以了
void main() {
int *a[2],*b,c,d[10] = {1,2,3,4,5,6,7,8,9,10 };
fun(a); //错误
fun(b); //错误
fun(c); //错误
fun(d); //正确
}