函数和数组

阿紫 posted @ 2012年4月11日 17:32 in c/c++ , 1205 阅读

以前的,先贴出来,嘿嘿。

     函数是处理复杂数据类型的关键,比如数组或者结构。编写特定函数处理特定的数组操作是有好处的,可靠性高,修改和调试方便,另外将存储属性与操作结合起来也是像oop思想迈进了一步。

    首先函数需要知道对哪个数组进行操作,所以要把数组名作为参数传递给函数。为了使函数通用,不限定特定长度的数组,因此需要传递数组的长度。如:int sum(int arr[],int n);方括号为空表示可以把任意长度的数组传递给函数,但是arr实际上并不是数组,而是指针,但是在编写函数体的其余部分可将arr当做数组来处理。在c++中,当且仅当用于函数头或者函数原型时int *arr与int arr[]的含义才是相同的。都意味着arr是一个int型指针,因此不能在函数体中使用int p[]来声明指针。为将数组类型与元素数量告诉函数,需要两个不同的参数来传递,如:void fillArray(int arr[],int size);而不要试图通过方括号表示法来传递数组长度。如:

void fillArray(int arr[size]);编译器忽略为任何数组形参指定的长度。

 

#include <iostream>
const int ArSize = 8;
int sum_arr(int arr[], int n);        // 原型
int main()
{
    using namespace std;
    int cookies[ArSize] = {1,2,4,8,16,32,64,128};
 
    int sum = sum_arr(cookies, ArSize);//调用
    cout << "Total cookies eaten: " << sum <<  "\n";
    return 0;
}
 
int sum_arr(int arr[], int n)
{
    int total = 0;
 
    for (int i = 0; i < n; i++)
        total = total + arr[i];
    return total; 
}

 

函数调用sum_arr(cookies,ArSize)将cookies数组第一个元素的地址和元素个数传递给sum_arr()函数,sum_arr()函数将cookies的地址赋给指针变量arr,将ArSize赋给int变量n。程序实际上并没有将数组内容传递给函数,而是将数组位置,元素类型及元素数目传递给函数。传递常规变量时,函数使用的是该变量的拷贝,但是传递数组时,函数将使用原来的数组。将数组地址作为参数可以节省复制整个数组所需的时间和内存。

   c++将数组名解释为第一个元素的首地址,两种例外是:第一,数组声明使用数组名来标记存储位置;第二是对数组名使用sizeof将得到的是整个数组的长度。

函数和二维数组:

     data[3][4]={{1,1,1,1},{2,2,2,2},{3,3,3,3}};

    int total=sum(data,3);

data是一个数组名,该数组有3个元素,每一个元素本身又是一个数组,由4个int值组成。因此data的类型是指向由4个int组成的数组的指针。因此,原型如下:

int sum(int (*arr)[4],int size);其中的括号是不可缺的,因为int *arr[4]将声明一个由4个指向int的指针组成的数组,而不是由一个指向由4个int组成的数组的指针。另一种格式的原型:

int sum(int arr[][4],int size);//指向由4个int组成的数组。指针类型指定了列数

因此sum()函数只能接受由4列组成的数组,但长度变量size指定了行数。

  • 无匹配

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter