首页 > 代码库 > c++ 函数(1)

c++ 函数(1)

函数中,数组如何传参?

整个数组传过去是不可以的。自然联想到指针和引用。

  • 因为数组指针本质上就是多重指针,所以以下三种传参方式都是可以的:
void print(const int*);void print(const int[]); //优点:可以看出函数意图void print(const int[10]); //优点:“10”代表了我们的期望维度,但因为int[10]本质上是int*,所以与前两种实际上是一样的。

const修饰符是可加可不加的。当我们可能会一不小心时,最好加上。

  • 当然啦,也可以用引用传参。但是其一般有一个局限性:限定了数组长度。

为什么呢?我认为是引用必须绑定一个实体。

#include <iostream>using namespace std;void print(int (&arr)[]){ //报错,应在[]内加上数字    for (auto elem:arr){        cout << elem << endl;    }}void ass(int ia[], int len){    for (int i = 0; i < len; i++){        *ia++ = i;    }}int main(){    int a1[10], a2[20];    ass(a1, 10);    ass(a2, 20);    print(a1);    print(a2);    return 0;}
  • 如何传递一个多维数组呢?

明确一个概念:在c++语言中其实没有真正的多维数组。所谓多维数组其实是数组的数组。

void print(int matrix[][10], int rowsize)

或者:

void print(int (*matrix)[10], int rowsize)

不能漏掉第一维以后的数组维度!!!为什么呢?不是在前面说int[]就等于int*吗?

解释是:如果不知道其他维度,在使用诸如array[n][m]时,编译器就无法正常寻址。因为int的值是固定的,所以省略掉没有什么关系。

今天就整理到这里。

c++ 函数(1)