C++参数传递,数组引用传递,保护数组退化为指针
2017-01-04 16:11
531 查看
转: C++参数传递,数组引用传递,保护数组退化为指针
如下定义就得到一个数组的引用
类型名 (&变量明)
;
在进行参数的传递时,数组引用可以帮助我们防止数组退化为指针,而这是我们在编程中很难注意到的问题。
下面来看一个实例:
当然,如果不去理会sizeof()的话,这两个函数的输出不会有任何的不同,他们都能够正确的输出array[]中的10个值,但当我们观察一下sizeof()的值就会发现很大的不同。
问题1:输出4
问题2:输出40
从这我们就能看出,当array[]作为参数传递过去后,如果接收的参数是也是一个数组,那么它就会退化为一个指针,也就是我们常说的“数组就是一个指针”。当接收的参数是一个数组引用是,就会发现它还是保持了自己的原生态,即“数组仍然是一个数组”。这时,数组引用就起到了一个保护自己退化为一个指针的作用。
如下定义就得到一个数组的引用
类型名 (&变量明)
;
在进行参数的传递时,数组引用可以帮助我们防止数组退化为指针,而这是我们在编程中很难注意到的问题。
下面来看一个实例:
#include <iostream> void each(int int_ref[10]) { std::cout << sizeof(int_ref)<<std::endl; for(int i=0;i<10;i++) std::cout<<int_ref[i]<<" "; std::cout<<std::endl; } void each2(int (&int_ref)[10]) { std::cout<<sizeof(int_ref)<<std::endl; for(int i=0;i<10;i++) std::cout<<int_ref[i]<<" "; std::cout<<std::endl; } int main() { int int_array[] = {1,2,3,4,5,6,7,8,9,10}; each(int_array);//问题1:sizeof()的值? each2(int_array);//问题2:sizeof()的值? return 0; }
当然,如果不去理会sizeof()的话,这两个函数的输出不会有任何的不同,他们都能够正确的输出array[]中的10个值,但当我们观察一下sizeof()的值就会发现很大的不同。
问题1:输出4
问题2:输出40
从这我们就能看出,当array[]作为参数传递过去后,如果接收的参数是也是一个数组,那么它就会退化为一个指针,也就是我们常说的“数组就是一个指针”。当接收的参数是一个数组引用是,就会发现它还是保持了自己的原生态,即“数组仍然是一个数组”。这时,数组引用就起到了一个保护自己退化为一个指针的作用。
相关文章推荐
- C++参数传递,数组引用传递,保护数组退化为指针
- 参数传递时数组引用保护数组退化为指针
- 参数传递时数组引用保护数组退化为指针
- 再开一篇关于C++程序设计基核心之一:引用,指针,符号优先级,函数参数传递
- C++指针与引用传递参数
- C/C++语言参数传递----值传递、引用传递、指针传递、指针引用传递
- C++的引用传递、指针传递参数在java中的相应处理方法
- C++函数参数和返回值三种传递方式:值传递、指针传递和引用传递(着重理解)
- C++ 函数参数传递-传递指向指针的引用
- C++用const 保护 引用参数的传递
- C/C++语言参数传递----值传递、引用传递、指针传递、指针引用传递
- 【转】C++函数——指针和引用类型的参数传递
- C/C++语言参数传递----函数/方法 参数的指针引用传递
- C/C++中的函数参数传递机制_指针_引用
- 数组作为函数参数传递时退化为指针(腾讯)
- C++指针、数组、引用、变量作函数参数
- C#调用C/C++动态库的参数传递---数组指针的传递
- C++函数参数和返回值三种传递方式:值传递、指针传递和引用传递(着重理解)
- C或C++中函数的参数传递包括:值传递、指针传递、引用传递
- C++ 常量指针或者常量引用作为函数参数传递的原因