函数和数组的小知识点笔记

1.函数使用指针来处理数组

程序示例一:

#include <iostream>
using namespace std;
int sumFun(int arr[],int count);
const int SIZE = 10;
int main()
{
    int sum=0;
    int array[SIZE]={1,2,3,4,5,6};
    sum=sumFun(array,SIZE);
    cout<<"The total of array is "<<sum<<endl;

    return 0;
}
int sumFun(int arr[],int count)
{
    int total=0;
    for (int i=0;i<count;i++)
    {
        total+=arr[i];
    }
    return total;
}

输出结果:The total of array is 21

可以注意到在函数原型中,int sumFun(int arr[],int count),arr是数组名,c++中将数组名解释为其第一个元素的地址:arr==&arr[0],而在函数调用中,我们传递的就是地址值,sum=sumFun(array,SIZE),因此我们还可以有以下声明int sumFun(int* arr,int count),这里用int* arr代替了int arr[],两种声明都是正确的,都可以用于函数头或函数原型中。

2.使用const保护数组

创建以数组作为参数的函数很简单,只需将数组名和填充的元素数目传递给函数即可。但是有一个问题——即确保函数不会修改原始数据,除非函数的目的本来就是修改传递给他的数据,否则应该避免发生原始数据被修改的情况。
为了防止函数无意中修改原始数据,可以在函数原型声明形参时使用关键字const
比如,
int sumFun(const int* arr,int count)
该声明表示,指针arr指向的是常量数据,意味着不能用arr修改数据,但这并不意味着原始数据必须是常量,而只是意味着不能在 sumFun函数中使用arr来修改数据,因此 sumFun函数将数组视为只读数据比如,无意间在 sumFun函数中修改了数组值,*arr[2]=4;编辑器将禁止这样做。

3.使用数组区间的函数

对于处理数组的c++函数,必须将数组的种类、起始位置和数组中的元素数目提交给它,传统的方法是,将指向数组起始位置的指针作为一个参数,将数组长度作为第二个参数,传递给函数,这样便可以找到所需的所有数据。而还有另一种给函数提供所需信息的方法,即指定区间元素,这可以通过传递两个指针来完成,一个指针标识数组的开头,一个指针标识数组的尾部。

程序实例一修改:

函数定义:

int sumFun(const int* begin,const int* end)
{
    const int* pt;
    int total=0;
    for(pt=begin;pt!=end;pt++)
    {
        total+=*pt;
    }
    return total;
}

函数调用:

sum=sumFun(array,array+SIZE);

输出结果:The total of array is 21

4.函数和二维数组

为编写将二维数组作为参数的函数,必须牢记,数组名将被视为地址,相应的形参是一个地址,就像一维数组一样,比较难处理的是如何正确声明指针。
比如,有下面的代码:

int data[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

函数调用:int total=sum(data,3);

那么函数sum的原型是什么呢,它的定义又是什么呢?函数为何将行数3作为参数,而不用列数4作为参数呢?

data是一个数组名,该数组有三个元素,第一个元素本身就是包含4个int元素的数组,因此,data的类型是指向由4个int组成的数组的指针。正确的原型如下:

int sum(int (*ar)[4],int size);

还有另一种格式,含义同上,但可读性更强

int sum(int ar[][4],int size);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值