您的位置:首页 > 其它

数组参数传递时需要注意的事项

2015-08-29 21:35 330 查看
在进行C/C++编程的时候,常常会处理形参是数组的类型,如下的类型:

void printdata(int arr[100])
{
for(int i=0;i<100;i++)
cout<<arr[i];
}
看这段程序,我们很容易知道,传递的时候,不管传递什么,编译器都将传递过来的参数转化为指针,这里的100只是个烟雾弹,编译器实际中只会检查是不是指针、元素类型是否匹配,但是不会对实际的长度进行检测。

所以下面的几种方式的传值都是正确的:

int i=90;
int a[10]={0};
int b[50]={2,3,4,5};
int c[100]={1,2,3,5,6,3,2};

printdata(&i);
printdata(a);
printdata(b);
printdata(c);
以上的程序块编译的时候都是正确的,但是在运行的时候,i、a、b均会出现错误,访问了不存在的地方,只有c是正确的。

那么到底能不能在形参内进行长度的检测呢?答案是可以的,我们只需要传递数组的引用即可。

void printdata(int (&arr)[100])
{
for(int i=0;i<100;i++)
cout<<arr[i];
}
这种情况下,由于是数组的一个引用,编译器不会把它转化为一个指针,这样在执行函数的时候会进行数组长度的检测。

这里需要注意的一点是,在定义函数的时候,由于[ ]的优先级高于&,所以需要加括号。

然后在调用这个函数的时候,如果传递的参数是i、a、b,则编译出现错误,不通过。只有c编译通过且运行没有问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: