C++数组作为参数

C++里面把数组当参数这个知识点一直不是很清晰。这次把他明确化了。

非引用参数

非引用参数的情况还是比较简单的。

int compute(int array[4]);
int compute(int array[]);
int compute(int *array); // 编译器会把上面两个解释成这个
  • 1
  • 2
  • 3

以上三种原型都会被编译器解释为指针,因此即使在数组定义里写了长度为4,依然可以传任意长度的数组进来。

引用参数

首先,明确数组的引用和引用的数组。。

int compute(int &array[5]); // 引用的数组,但其实这是不合法的,引用的数组不可以作为函数参数
int compute(int (&array)[5]); // 数组的引用,可以解释为array首先被声明是个引用,然后是int[5]的引用
  • 1
  • 2

引用的数组不能作为参数的原因有以下几点:

  1. 引用使用前必须被初始化。但是数组是不能被另一个数组直接初始化的。
  2. 可以用指针数组替代

数组作为引用参数,如果定义了长度5,是会被检测长度的。例如下面的调用就不合法:

int data[8];
compute(data); // 8!=5 error.
  • 1
  • 2

会提示:invalid initialization of reference of type ‘int (&)[5]’ from expression of type ‘int [8]’

而且,data的长度是编译器就决定的,array绑定的一定是长度为5的变量。因此sizeof可以得到结果20。

// 数组作为引用参数
int compute(int (&array)[5]){
    return sizeof(array); // return 20
}

// 数组作为非引用参数
int compute(int array[5]){
    return sizeof(array); // return 8(array指针的长度)
}

猜你喜欢

转载自blog.csdn.net/xikangsoon/article/details/112808161
今日推荐