数组作为函数形参的一点总结
2015-11-09 23:14
211 查看
记得以前学C的时候总是会把这个知识点搞混,形参不知道怎么写,今天做个小结。
1.关于int a[]
这不是一个数组的声明,因为没有指定数组的大小,但是有两种情况会出现这种写法。
(1)int a[]={1, 2};
这个写法等价于 int a[2]={1,2}; 系统会自动计算大小。
(2)在形参时,如void func(int a[]);
这个写法等价于void func(int *a); 系统默认把数组转换为指针。
2.数组形参的3种写法(不包括引用)
3.数组的引用
这样就定义了一个数组的引用b,注意是int (&b)[4] 而不是int &b[4], 一开始我不理解为什么要加括号,后来自己想了一种帮助理解的方法,引用符号&其实就是给变量取别名,所以&一定是跟这个变量名放在一起,所以无论什么情况下都要优先与别名结合。这也方便理解了为什么指针的引用写的是int * &p;
而int &b[4]是定义了一个存放4个引用的数组,而C++中是不存在引用数组的,因为引用本身并不占用内存,所以不能存在数组中。
有了数组的引用之后就可以用在函数形参上了,所以数组形参的第4种写法就是:
1.关于int a[]
这不是一个数组的声明,因为没有指定数组的大小,但是有两种情况会出现这种写法。
(1)int a[]={1, 2};
这个写法等价于 int a[2]={1,2}; 系统会自动计算大小。
(2)在形参时,如void func(int a[]);
这个写法等价于void func(int *a); 系统默认把数组转换为指针。
2.数组形参的3种写法(不包括引用)
void func(int *a); void func(int a[]); void func(int a[2]);//这个2可以替换为其他任意数字,会自动被系统忽略,但是必须为正
3.数组的引用
int a[4]; int (&b)[4]=a;
这样就定义了一个数组的引用b,注意是int (&b)[4] 而不是int &b[4], 一开始我不理解为什么要加括号,后来自己想了一种帮助理解的方法,引用符号&其实就是给变量取别名,所以&一定是跟这个变量名放在一起,所以无论什么情况下都要优先与别名结合。这也方便理解了为什么指针的引用写的是int * &p;
而int &b[4]是定义了一个存放4个引用的数组,而C++中是不存在引用数组的,因为引用本身并不占用内存,所以不能存在数组中。
有了数组的引用之后就可以用在函数形参上了,所以数组形参的第4种写法就是:
void func(int (&a)[2]);//注意这个2必须与实参的数组大小一致,否则编译不通过。使用引用作为形参的好处就是不会出现像指针一样的越界情况,而缺点就是不够灵活,因为实参只能传长度一样的数组。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 文件遍历排序函数
- ruby 数组使用教程
- Ruby中的数组和散列表的使用详解
- C#实现AddRange为数组添加多个元素的方法
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- C#动态调整数组大小的方法
- ASP下经常用的字符串等函数参考资料
- PostgreSQL教程(五):函数和操作符详解(1)
- DOS批处理 函数定义与用法
- asp Chr 函数 数字转字母的方法
- Lua中的函数精讲笔记
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中调用C++函数示例