【C Prime Plus】学习笔记,Chapter 10,数组和指针之二


 

 

// C Prime Plus, Page 656
/*
  int marbles[10];
  如果要计算这个数组所有元素的和,函数的可能调用形式如下:
  int total = sum(marbles)
  数组名 marbles是它的第一个元素的 地址,而地址(指针)是个整型数(int)
  也就是说形参marbles实际是传递了个地址,因此可以用个int *p 指针来构造函数原型:
  所以相应的函数原型如下:
  int sum(int *ar) 
  本来是求数组的和,居然是可以用指针来表达.

*/

   int sum(int *ar)
   {
     int i;
  int total=0;
  for(i=0;i<10;i++)
  total+=*(ar+i) ; // *(ar+i)实际是取地址对应的值,然后把地址偏移一个单元,即必须是一块连续的内存.
  // 或者 total+=ar[i],这样直接把指针变量写成了数组,但是不便于理解
  // ar[i] is the same as *(ar+i)

  //--
      return total;

   }


 

如果把10也作为参数传递进去:

 

 

 int sum(int *ar,int n)
   {
     int i;
	 int total=0;
	 for(i=0;i<n;i++)
		total+=ar[i] ; // ar[i] is the same as *(ar+i) ,但是对刚刚学C人来说不好理解.一个指针形参直接当做数组来使用了.

  //--
      return total;

   }


 

/* 
     从函数原型的语境上,显然 可以用 int ar[] 替代 int *ar,也就是函数原型可以是这样的:
     int sum(int ar[],int n);
      所以 int *ar 和 int ar[] 在本例中是等同的
      但是,很显然从语法上讲, int *ar 表示为指向int类型变量的指针 即 pointer-to-int
	  而 int ar[] 则表示为int类型的数组,它只有在作为形参的时候,才表示为指向int
	   类型变量的指针,即pointer-to-int 


        在数组作为参数的申明中,以下4种形式是等价的(函数原型的申明中,是可以省略参数名称的)
		int sum(int *ar,int n);
		int sum(int *,int);
		int sum(int ar[],int n);
		int sum(int [],int);
	   */


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值