函数、数组和指针的形参

关于函数的形参

有一点要注意,只有在函数原型或者是函数定义头中,才可以使用int a[]代替int *a;如:
int sum (int a[],int n);
int *a形式和int a[]形式都表示a是指向int的指针。但是,int a[]只能用于声明形式参量。第二种形式(int a[])则是提醒指针a指向的不止只一个int型变量,还是一个int类型数组的元素。

声明数组形参

 因为数组名是该数组首元素的地址,作为实际参数的数组名要求形式参数是一个与之匹配的指针。只有在这种情况下,c才会把int a[]和int *a解释成一样的。所以以下四种方式是等价的:
int sum(int *a,int n);

int sum (int *,int n);

int sum(int a[],int n);

int sum(int [],int );
但是在函数定义中不能省略参数名。如下面两种形式等价:
int sum(int *a;int n)
{

     //内容已经省略

}

int sum(int a[],int n)
{

    //省略

}

使用指针形参


#include <stdio.h>
#define SIZE 10
int sump(int *start,int *end);
int main()
{
    int marbles[SIZE]={20,10,5,39,4,16,19,26,31,20};
    int 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;
}
(程序来自c primer plus 第六版人名邮电出版社)
注意程序中有一点很值得借鉴,sump()函数中while循环使用两个指针来结束循环,while(start<end)时跳出循环,用end指向末尾,start指向开头,简单易懂以后要在涉及到数组指针问题的时候要多用这种方法。其实也可以把循环体压缩成如下写法:
total += *start++;
这样可以使程序更加精简,不过也更加难懂降低了可读性,再理解透彻以后也可以尝试多用用。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值