C++数组参数应用方式探讨

对于经验丰富的编程人员来说,C++编程语言应该是他们经常使用于程序开发的一种实用性语言。那么,在C++中,C++数组参数永远不会按值传递。它是传递***个元素(准确地说是第0个)的指针。

10年积累的网站设计、成都做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有沁阳免费网站建设让你可以放心的选择与我们合作。

例如,如下声明:

 
 
 
  1. void putValues(int[10]); 

被编译器视为:

 
 
 
  1. void putValues(int*); 

C++数组参数的长度与参数声明无关。因此,下列三个声明是等价的:

 
 
 
  1. void putValues(int*);  
  2. void putValues(int[]);  
  3. void putValues(int[10]); 

因为数组被传递为指针,所以这对程序员有两个含义:

1、在被调函数内对参数数组的改变将被应用到数组实参上而不是本地拷贝上。当用作实参的数组必须保持不变时,程序员需要保留数组的拷贝。函数可以通过把参数类型声明为const来表明不希望改变数组元素:

 
 
 
  1. void putValues(const int[10]); 

2、数组长度不是参数类型的一部分。函数不知道传递给它的数组的实际长度,编译器也不知道,当编译器对实参类型进行参数类型检查时,并不检查数组的长度。
例如:

 
 
 
  1. void putValues(int[10]); //视为int*  
  2. int main()  
  3. {  
  4. int i, j[2];  
  5. putValues(&i); //ok:&i是int*; 潜在的运行错误  
  6. putValues(j); //ok:j被转换成第0个元素的指针  
  7. // 实参类型为int*:潜在的运行错误  
  8. return 0;  

参数的类型检查只能保证putValues()的再次调用都提供了int*型的实参。类型检查不能检验实参是一个10元素的数组。

习惯上,C风格字符串是字符的数组,它用一个空字符编码作为结尾。但是所有其他类型,包括希望处理内含字符的字符数组,必须以某种方式在向函数传递实参时使其知道它的长度。一种常见的机制是提供一个含有C++数组参数的长度的额外参数。例如:

 
 
 
  1. void putValues(int[], int size);  
  2. int main()  
  3. {  
  4. int i,j[2];  
  5. putValues(&i, 1);  
  6. putValues(j, 2);  
  7. return 0;  

另外一种机制是将参数声明为数组的引用。当参数是一个数组类型的引用时,数组长度成为参数和类型的一部分,编译器检查数组实参的长度与在函数参数类型中指定的长度是否匹配。

 
 
 
  1. // 参数为10个int的数组  
  2. // parameter is a reference to an array of 10 ints  
  3. void putValues(int (&arr)[10]);  
  4. int main()  
  5. {  
  6. int i, j[2];  
  7. int a[10];  
  8. putValues(i); // 错误:实参不是10个int的数组  
  9. putValues(j); // 错误:实参不是10个int的数组  
  10. putValues(a); // 正确  
  11. return 0;  

因为C++数组参数的长度现在是参数类型的一部分,所以putValues()的这个版本只接受10个int的数组。这限制了可以作为实参被传递给putValues()的数组的种类。但是,它也使函数的实现更加简单。

【编辑推荐】

  1. C++获取当前路径实现技巧分享
  2. C++反射机制具体实现方法详解
  3. C++模板限制实际应用方式探讨
  4. C++字符串分割函数具体使用方法总结
  5. C++异常传递三种不同方式介绍

网站名称:C++数组参数应用方式探讨
本文来源:http://www.shufengxianlan.com/qtweb/news5/305405.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联