数组参数传递时需要注意的事项
2015-08-29 21:35
330 查看
在进行C/C++编程的时候,常常会处理形参是数组的类型,如下的类型:
所以下面的几种方式的传值都是正确的:
那么到底能不能在形参内进行长度的检测呢?答案是可以的,我们只需要传递数组的引用即可。
这里需要注意的一点是,在定义函数的时候,由于[ ]的优先级高于&,所以需要加括号。
然后在调用这个函数的时候,如果传递的参数是i、a、b,则编译出现错误,不通过。只有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编译通过且运行没有问题。
相关文章推荐
- SQL基本语法(笔记)
- Linux sort 命令
- 腾讯在线模拟笔试-2016涉及知识点
- LeetCode Ugly Number
- muduo网络库源码学习————线程特定数据
- 了解 JavaScript (3)- 马上开始
- Android Studio plugins recommend
- php大力力 [036节] 后台系统的登录页面界面做完啦
- Hadoop中两表JOIN的处理方法(转)
- 初来咋到~~~
- 懒加载的坑
- 内网渗透浅析
- 【english】1508 The Great Augus
- C++面试问答攻略(转)
- JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释
- Mybatis学习笔记(一)入门例子
- Javascript高级程序设计——基本概念(一)
- jersey 搭建rest风格服务
- C/C++中extern关键字详解
- BestCoder Round #53 (div.2) 1002 Rikka with Tree