向函数传递数组信息的方法一是使用一个指针参量来确定数组的开始起点,使用一个整数参量来指明数组的元素个数。方法二是传递两个指针,第一个指针指明数组的起始地址,第二个指针指明数组的结束地址。例如:
#include<stdio.h>
#define SIZE 10
int sump (int *start,int *end);
int main(void)
{
int marbles[SIZE]={20,10,5,39,4,16,19,26,31,20};
long answer;
answer=sump(marbles,marbles+SIZE);
printf("the total number of marbles is %ld.\n",answer);
return 0;
}
int sump (int *start,int *end)
{
int total=0;
while(start<end)
{
total+=*start;
start++;
}
return total;
}
由于指针start最初指向marbles的首元素,因此执行赋值表达式total+=*start时,把首元素的值加到total上。然后表达式的start++使指针变量start加1,从而指向数组的下一个元素。start是指向int的指针,因此当start加1时,它将增加一个int的大小。
函数sump()使用第二个指针来控制循环次数:while(start<end),因为这是一个对于不相等关系的判断,所以处理的最后一个元素将是将是end所指向的位置之前的元素。这意味着end实际指向的位置是在数组最后一个元素之后。使用这种“越界”指针可使函数调用的形式更整洁:answer=sump(marbles,marbles+SIZE);
由于索引是从0开始的,因此marbles+SIZE指向数组结尾处之后的下一个元素。