数组作为函数的参数

c++中将数组名视为指针,数组名被解释为第一个元素的地址。对数组名加1相当于指向下一个元素,对指针加1相当于加上了一个指针指向的类型的长度

(这个随笔搁置了很久才发现之前没写完的,已经忘记了当时想写的了,就不做补充了)

数组作为函数的参数

将数组作为参数传递给函数时并不是将数组内容传递给函数,而是将数组的第一个元素的指针传递给函数将数组地址作为参数可以节省复制整个数组所需的时间和内存

数组作为参数的函数的原型
①int sumArr(int arr[], int length); ②int sumArr(int* arr, int length);
//当且仅当在函数头或者函数原型中时,int arr[]和int *arr是相同的

注意:

  • 因为因为指针本身并没指出数组的长度,必须显示的传递数组的长度,不能使用方括号表示法来传递数组长度
  • 不能在函数中设置数组长度
void showArr(int arr[], int length);//ok 
void showArr(int arr[size]);//error

//必须显示的传递长度不能用方括号表示法来传递数组长度
  • 对数组名加1相当于指向下一个元素

 

void showSecond(int arr[], int length) {
    std::cout << arr + 1 << std::endl;
}
//在此函数中arr是一个int类型的指针,将该指针加一也就是加上一个int类型所占的内存单位。加一之后指向的就是传递过来的数组的第二个元素
  • 传递常规变量时,函数使用该变量的拷贝。
  • 传递数组时,函数将使用原来的数组。
  • 如果想要防止在函数中无意中修改数组的内容,可以配合使用const关键字
void showArr(const int arr[], int length);
  • 除了将数组长度显示的传递给函数以外,还有另一个方法。传递两个指针给函数,第一个指针标识数组的开头,第二个指针标识数组的结尾。
//在这里end应该为数组最后一个元素后面的指针
void showArr(const int* begin, const int* end) {
    const int* pt;
    for (pt = begin; pt != end; pt++) {
        std::cout << (*pt) << std::endl;
    }
}

 

posted @ 2023-04-01 14:38  EF果果  阅读(295)  评论(0)    收藏  举报