Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4204410
  • 博文数量: 176
  • 博客积分: 10059
  • 博客等级: 上将
  • 技术积分: 4681
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-24 12:27
文章分类

全部博文(176)

文章存档

2012年(1)

2011年(4)

2010年(14)

2009年(71)

2008年(103)

分类: C/C++

2009-05-20 10:30:01

在C++中数组永远不会按值传递它是传递第一个元素(准确地说是第0 个)的指针
如下声明
    void putValues( int[ 10 ] ); //当编译器对实参类型进行参数类型检查时,并不检查数组的长度,编泽器忽略10
被编译器视为
    void putValues( int* );
数组的长度与参数声明无关,因此下列三个声明是等价的
// 三个等价的putValues()声明
void putValues( int* );
void putValues( int[] );
void putValues( int[ 10 ] );

传递数组长度的三种机制
1、提供一个含有数组长度的额外参数:void putValues( int[], int size );
2、将参数声明为数组的引用:void putValues( int (&arr)[10] );
当参数是一个数组类型的引用时,数组长度成为参数和实参类型的一部分,编译器检查数组实参的长度与在函数参数类型中指定的长度是否匹配
// 参数为10 个int 的数组
// parameter is a reference to an array of 10 ints
void putValues( int (&arr)[10] );//只接受10 个int的数组
int main() {
    int i, j[ 2 ];
    putValues( i ); // 错误: 实参不是 10 个 int 的数组
    putValues( j ); // 错误: 实参不是 10 个 int 的数组
    return 0;
}

3、使用抽象容器
void putValues(const vector &vec );

 

阅读(1597) | 评论(0) | 转发(0) |
0

上一篇:tomcat配置

下一篇:cvs中的branch和tag辨析

给主人留下些什么吧!~~