在C函数中作为参数传递指针
我阅读了所有我能找到的关于这个话题的回答问题,但没有一个回答我的问题 我仍在阅读C语言中的指针,现在我试图理解指针是如何通过函数传递的。但是,以下代码(取自tutorialspoint.com)中有一些我不理解的地方:在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); /*
#包括
/*函数声明*/
双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;
}