|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
函数功能:求出长度为n的数组b的所有元素的和
int fun(int *a,int n)
{
int i,s=0;
for(i=0;i<n;i++)
{
s+=*(a+i);//方式1
s+=a[i]; //方式2
}
return s;
}
main()
{
int b[5]={1,2,3,4,5};
printf("sum=%d",fun(b,5));
}
我的问题:方式2:这里s+=a[i];定义了指针*a;为什么可以变成数组a[]呢,为什么不区分呢,或者把代码改为如下
int fun(int a[],int n)
{
int i,s=0;
for(i=0;i<n;i++)
{
s+=*(a+i);//方式2
}
return s;
}
main()
{
int b[5]={1,2,3,4,5};
printf("sum=%d",fun(b,5));
}
(1) 用 a[i] 这样的形式对数组进行访问总是会被编译器改写成(或者说解释为)像 *(a+i) 这样的指针形式。
(2) 指针始终是指针,它绝不可以改写成数组。你可以用下标形式访问指针,一般都是指针作为函数参数时,而且你知道实际传递给函数的是一个数组。
(3) 在特定的环境中,当数组作为函数形参时,也只有这种情况,一个数组可以看做是一个指针。作为函数形参的数组始终会被编译器修改成指向数组第一个元素的指针。
(4) 当希望向函数传递数组时,可以把函数参数定义为数组形式(可以指定长度也可以不指定长度),也可以定义为指针。不管哪种形式,在函数内部都要作为指针变量对待。
|
|