数组形参 | 您所在的位置:网站首页 › 在函数中用形参定义一个数组 › 数组形参 |
数组的两个特殊性质对我们定义和使用作用在数组上的函数有影响,这两个性质分别是:不允许拷贝数组以及使用数组时(通常)会将其转换成指针。因为不能拷贝数组,所以我们无法以值传递的方式使用数组参数。因为数组会被转换成指针,所以当我们为函数传递一个数组时,实际上传递的是指向数组首元素的指针。 尽管不能以值传递的方式传递数组,但是我们可以把形参写成类似数组的形式: //尽管形式不同,但这三个print函数时等价的 //每个函数都有一个const int*类型的形参 void print(const int *) ; void print(const int[]);//可以看出,函数的意图是作用于一个数组 void print(const int[10]); //这里的维度表示我们期望数组含有多少元素,实际上不一定 尽管表现形式不同,但上面的三个函数时等价的:每个函数的唯一形参都是const int*类型的。当编译器处理对print函数的调用时,只检查传入的参数是否是const int*类型: int i=0,j[2]={0,1}; print(&i); //正确:&i的类型是int * print(j); //正确:j转换成int*并指向j[0] 如果我们传给print函数的是一个数组,则实参自动地转换成指向数组首元素的指针,数组的大小对函数的调用没有影响。
因为数组是以指针的形式传递给函数的,所以一开始函数并不知道数组的确切尺寸,调用者应该为此提供一些额外的信息。管理指针形参有三种常用的技术。
使用标记指定数组长度 管理数组实参的第一种方法是要求数组本身包含一个结束标记,使用这种方法的典型示例是C风格字符串。C风格字符串存储在字符数组中,并且在最后一个字符后面跟着一个空字符。函数在处理C风格字符串时遇到空字符停止: void print(const char * cp) { if(cp) while(*cp) cout |
CopyRight 2018-2019 实验室设备网 版权所有 |