c++primer里的一道题
int *a;
int a[];
int a[10];
三种形参都一样,都被认为是int *a。
能检测边界的只有这种 int(&a)[10]。
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
int Sum1(int *begin,int *end)
{
int sum=0;
while(begin!=end)
{
sum+=*begin;
++begin;
}
return sum;
}
int Sum2(int a[],size_t l)
{
int sum;
for(size_t i=0;i!=l;i++)
{
sum+=*a;
a++;
}
return sum;
}
int Sum3(int (&a)[10],int i)//这种形参传递了数组的大小
{
int sum=0;
int index=0;
while(a[index]<=i)
{
cout<<"sum="<<sum<<endl;
cout<<"index"<<index<<' '<<"a[index]"<<a[index]<<endl;
sum+=a[index];
cout<<"sum="<<sum<<endl;
++index;
if(index==10)
{
break;
}
cout<<"****"<<endl;
}
return sum;
}
int main ()
{
const size_t length=10;
int a[length]={1,2,3,4,5,6,7,8,9,10};
cout<<Sum1(a,a+length)<<endl;
cout<<Sum2(a,length)<<endl;
cout<<Sum3(a,10)<<endl;
return 0;
}