数组的形参与实参,通过引用传递数组
数组形参:
void printValues(int*);
void printValues(int[]);
void printValues(int[10]);//以上三种是等价的。
通常,将数组形参直接定义为指针要比使用语法定义更好。
第三种方式,形参的长度容易引起误解。
当编译器检查数组形参关联的实参时,它只会检查实参是不是指针、指针的类型和数组的类型是否匹配,而不会检查数组的长度。
数组实参:
和其他类型一样,数组形参可定义为引用或非引用类型。大部分情况下,数组以普通的非引用类型传递,此时数组会悄悄地转换为指针。一般来说,非引用类型的形参会初始化为其相应实参的副本。而在传递数组时,实参是指向数组第一个元素的指针,形参复制的是这个指针的值,而不是数组元素本身。函数操纵的是指针的副本,因此不会修改实参指针的值。然而,函数可通过该指针改变它所指向的数组元素的值。通过指针形参做的任何改变都在修改数组元素本身
通过引用传递数组:
在《C++ Primer 第四版》的第七章208页,讲到了通过引用传递数组,和其他类型一样,数组形参可声明为数组的引用。如果形参是数组的引用,编译器不会将数组实参转化为指针,而是传递数组的引用本身。在这种情况下,数组大小成为形参与实参类型的一部分,编译器检查数组实参的大小与形参的大小是否匹配。
int (&a)[13],两边的圆括号是必须的,因为[]的优先级大于&
int &a[13]表示一个指向13个整形引用的数组,而(int &)a[13]表示含有13个整形元素数组的引用
#include<iostream> using namespace std; void output(int (&a)[13]) { for (int i = 0; i < 13; i++) cout << a[i] << " "; cout << endl; } void modify(int(&a)[13]) { for (int i = 0; i < 13; i++) a[i] += 1; } int main() { int a[13] = {1,2,}; output(a); modify(a); output(a); return 0; }
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: fstat & stat 使用
- 下一篇: java 简单员工管理系统