当前位置: 代码迷 >> 综合 >> 【C Prime Plus】学习笔记,Chapter 10,数组和指针之二
  详细解决方案

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

热度:78   发布时间:2024-01-19 15:46:04.0

 

 

// 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);
*/


 

  相关解决方案