在C函数中作为参数传递指针

在C函数中作为参数传递指针,c,arrays,pointers,C,Arrays,Pointers,我阅读了所有我能找到的关于这个话题的回答问题,但没有一个回答我的问题 我仍在阅读C语言中的指针,现在我试图理解指针是如何通过函数传递的。但是,以下代码(取自tutorialspoint.com)中有一些我不理解的地方: #包括 /*函数声明*/ 双getAverage(int*arr,int size); int main(){ /*包含5个元素的整数数组*/ 整数余额[5]={1000,2,3,17,50}; 双平均值; /*将指向数组的指针作为参数传递*/ 平均值=平均值(余额,5); /*

我阅读了所有我能找到的关于这个话题的回答问题,但没有一个回答我的问题

我仍在阅读C语言中的指针,现在我试图理解指针是如何通过函数传递的。但是,以下代码(取自tutorialspoint.com)中有一些我不理解的地方:

#包括
/*函数声明*/
双getAverage(int*arr,int size);
int main(){
/*包含5个元素的整数数组*/
整数余额[5]={1000,2,3,17,50};
双平均值;
/*将指向数组的指针作为参数传递*/
平均值=平均值(余额,5);
/*输出返回的值*/
printf(“平均值为:%f\n”,平均值);
返回0;
}
double getAverage(int*arr,int size){
int i,和=0;
双平均值;
对于(i=0;i
当调用getAverage(balance,5)时,我传入一个指向balance数组第一个元素的指针(正如我在上一个问题中所学到的)。但是我们如何访问getAverage内for循环中数组的实际内容(sum+=arr[i])

我阅读了以下资料来源:,我很确定第二个脚注后面的句子解释了这一点。但我还是不明白


感谢您的帮助

如您所述,在
getAverage
中,
arr
指向
余额的第一个元素。因此可以使用
*arr
访问第一个元素(读取或写入),就像调用程序中的
balance[0]
一样


要访问第二个元素,可以在取消引用之前向指针添加一个元素,即
*(arr+1)
,依此类推。这实际上相当于
arr[1]
。特别是,
arr[i]
相当于
*(arr+i)
。它将偏移量
i
添加到地址
arr
,按所指向对象的大小缩放,然后取消对指针的引用。

由于数组被分配为连续的内存块,因此访问数组中的任何元素只需知道两件事:

  • 此内存块的起始位置(即
    arr
  • 元素相对于起始位置的位置(即索引
    i

  • 因此,调用
    arr[i]
    将有效地计算数组起始位置的
    i
    空格,返回该索引处的值。

    arr[i]
    是编写
    *(arr+i)
    的好方法。这回答了你的问题吗?让人震惊的是。。。确实如此!我想知道为什么*符号没有收到回复!这很有道理!知道arr[i]等同于*(arr+i)回答了我的问题!
    #include <stdio.h>
    
    /* function declaration */
    double getAverage(int *arr, int size);
    
    int main () {
    
       /* an int array with 5 elements */
       int balance[5] = {1000, 2, 3, 17, 50};
       double avg;
    
       /* pass pointer to the array as an argument */
       avg = getAverage( balance, 5 ) ;
    
       /* output the returned value  */
       printf("Average value is: %f\n", avg );
       return 0;
    }
    
    double getAverage(int *arr, int size) {
    
       int  i, sum = 0;       
       double avg;          
    
       for (i = 0; i < size; ++i) {
          sum += arr[i];
       }
    
       avg = (double)sum / size;
       return avg;
    }