我阅读了有关此主题的所有已回答的问题,但我没有回答我的问题......
我仍在阅读C中的指针,现在我正在尝试理解指针如何通过函数传递。但是,我在下面的代码(取自tutorialspoint.com)中有一些我不理解的东西:
#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;
}
当调用getAverage(balance,5)时,我传入一个指向balance数组的第一个元素的指针(正如我在上一个问题中所学到的)。但是我们如何在getAverage中的for循环中访问数组的实际内容(sum + = arr [i])?
我阅读了以下来源:http://c-faq.com/aryptr/aryptrequiv.html,我很确定第二个脚注之后的句子正在解释这个问题。但我还是不明白。
感谢任何帮助!
答案 0 :(得分:2)
在getAverage
中,arr
指向balance
的第一个元素,如您所述。因此,*arr
可用于访问第一个元素(读取或写入),就像balance[0]
在调用者中一样。
要访问第二个元素,您可以在解除引用之前向指针添加一个元素,即*(arr + 1)
,依此类推。这实际上相当于arr[1]
。特别是,arr[i]
相当于*(arr + i)
。它将偏移i
添加到地址arr
,按指向的大小缩放,然后取消引用指针。
答案 1 :(得分:0)
因为数组被分配为连续内存块,所以您只需知道两件事就可以访问数组中的任何元素:
arr
)。i
)。因此调用arr[i]
将有效地计算数组起始位置的i
个空格,并返回该索引处的值。