我們經常會看到將一維數組的名字,即數組首地址作爲參數傳入函數,從而實現對數組進行一些簡單操作,比如數組的求和;此外我們還有另一種給函數提供所需信息的方法,即指定元素區間,這可以通過傳遞兩個指針來完成:一個指針標識數組的開頭,另一個指針標識數組的尾部。將區間傳遞給函數將告訴函數應當處理那些元素,這樣處理數組將更加靈活。
例如給出下例:
#include <iostream>
//#include<cstdio>
using namespace std;
const int arsize=8;
int sum_arr(const int *begin,const int *end);
int main()
{
int cookies[arsize]={1,2,4,8,16,32,64,128};
int sum=sum_arr(cookies,cookies+arsize);
cout<<"Total cookies eaten: "<<sum<< endl;
sum=sum_arr(cookies,cookies+3);
cout<<"First three eaters ate "<<sum<<" cookies.\n";
sum=sum_arr(cookies+4,cookies+8);
cout<<"Last four eaters ate "<<sum<<" cookies.\n";
return 0;
}
int sum_arr(const int *begin,const int *end)
{
const int *pt;
int total=0;
for(pt=begin;pt!=end;pt++)
total+=*pt;
return total;
}
程序說明
請注意程序中的sum_arr()函數中的for循環:
for(pt=begin;pt!=end;pt++)
total+=*pt;
它將pt設置爲指向要處理的第一個元素(begin指向的元素)的指針,並將*pt(元素的值)加入到total中。然後,循環通過遞增操作來更新pt,使之指向下一個元素。只要pt不等於end,這一過程就將繼續下去。當pt等於end時,它將指向區間的最後一個元素後面的位置,此時循環將結束。
其次,請注意不同的函數調用是如何指定數組中不同的區間的:
int sum=sum_arr(cookies,cookies+arsize); // all elements
...<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
<pre name="code" class="cpp" style="font-size: 14px;"> sum=sum_arr(cookies,cookies+3); // first 3 elements
...
<pre name="code" class="cpp" style="font-size: 14px;"> sum=sum_arr(cookies+4,cookies+8); // last 4 elements
...
通過這個簡單的例子,我們瞭解到使用數組區間的函數以及指針的簡單應用。