gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:08:13 24 4
gpt4 key购买 nike

我阅读了我能找到的关于这个主题的所有已回答问题,但没有人回答我的问题...

我仍在阅读 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 , 我很确定第二个脚注后面的句子正在解释这一点。但是我还是不明白。

感谢任何帮助!

最佳答案

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

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

关于c - 在 C 函数中将指针作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46507639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com