在函数中 传递数组

转自

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. **通过指针**: - 声明一个指向数组元素的指针,然后将该指针作为参数传递。例如: ```c void process_array(int arr[], int size) { for (int i = 0; i < size; i++) { // 对数组进行操作 printf("%d ", arr[i]); } } int main() { int numbers[] = {1, 2, 3, 4, 5}; int length = sizeof(numbers) / sizeof(numbers[0]); process_array(numbers, length); return 0; } ``` 这里,`arr`就是数组名,但它隐含地是指向第一个元素的指针。 2. **通过引用(可选)**: - 如果函数修改了数组,可以使用引用(&运算符)。然而,C标准并不支持对实参的“按值”传递,所以数组实际上是通过指针间接传入的。 3. **通过数组名**: - C语言中的这种行为被称为“隐式指针”,尽管不推荐,但如果你确实想让函数接收整个数组而不只是地址,可以这样做: ```c void print_array(int arr[]) { for (int i = 0; arr[i] != NULL; i++) { printf("%d ", arr[i]); } } int main() { int numbers[] = {1, 2, 3, 4, 5}; print_array(numbers); return 0; } ``` 注意这里假设数组最后一个元素为`NULL`,但在实际应用中,这通常是无效的,因为编译器不会自动添加这样的终止条件。 记住,当在函数内部访问数组时,通常最好明确指定数组大小或提供一个独立的计数器变量,而不是依赖于数组本身的长度。这样可以使代码更清晰、更安全。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值