在函数中 传递数组

转自

http://media.openonline.com.cn/media_file/200708/fushi/0803/C++yuyancxsj/web/lesson/chapter8/j4.htm

 

 

传递给自定义函数

  若要让一个函数求数组元素的和,需传递一个数组参数和数组大小参数。因为从传递 的数组参数(地址)中,没有数组大小的信息。
例如,下面的程序调用一个函数求数组元素之和:
    //*********************
    //**   ch7_5.cpp  **
    //*********************

    #include <iostream.h>

    int sum(int [], int);

    void main()
    {
     static int ia[5]={2,3,6,8,10};
     int sumOfArray;
     sumOfArray=sum(ia, 5);
     cout <<"sum of array: " <<sumOfArray <<endl;
    }

    int sum(int array[], int len)
    {
     int iSum=0;
     for(int i=0; i<len; i++)
      iSum+=array[i];
     return iSum;
    }

  运行结果为:
    slim of array:29

  sum()函数以整数数组作为第一个参数, 以整数作为第二个参数。由于传递数组实际上传递的是地址,所以函数原型中,数组参数的书写形式无须在方括号中写明数组大小。如果写明了数组大小,编译器将忽略之。数组形参的空方括号只是告诉函数,该参数是个数组的起始地址。由于数组参数是地址,对数组参数不能通过sizeof求得数组大小, 所以sum()函数必须要第二个参数:数组的大小。

在 C++ 函数传递数组通常有以下几种方式: 1. **通过指针**: - **传引用** (`&`):可以将数组名作为引用参数传递。这样,函数可以直接修改原数组,因为数组名本质上是一个指向数组首元素的指针。 ```cpp void processArray(int arr[], int size); // 定义函数接受整型数组引用 int myArray[5]; processArray(myArray, sizeof(myArray) / sizeof(myArray[0])); // 传递数组 ``` - **传指针** (`*`): 直接传递数组的首地址,即指针。 ```cpp void processArray(int* arr, int size); // 定义函数接受指向数组的指针 int myArray[5]; processArray(&myArray[0], 5); // 传递数组首地址 ``` 2. **通过`std::vector`**: 如果不想暴露数组长度或需要动态大小,可以使用`std::vector`。它实际上是动态数组,可以在内部管理容量。 ```cpp void processArray(const std::vector<int>& vec); // 定义函数接受`std::vector` std::vector<int> myArray = {1, 2, 3, 4, 5}; processArray(myArray); // 传递 vector ``` 3. **传递数组长度** (仅适用于固定大小数组): 另一种情况是,如果函数不需要直接访问数组内容,仅需数组大小,可以传递数组的长度。 ```cpp void processArrayOfLength(int arr[], int length); // 接受数组长度和指针 int myArray[5]; processArrayOfLength(myArray, 5); // 提供数组长度 ``` **注意事项**: - 传递数组时要注意数组越界的问题,特别是在处理指针时。 - 传递动态大小数组时,尽量避免在函数内部改变数组的实际大小,除非是非常明确的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值