首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将数组传递给函数形参

将数组传递给函数形参
EN

Stack Overflow用户
提问于 2015-03-30 20:42:37
回答 3查看 1.8K关注 0票数 2

我对指针和arrays.Please有一些疑问,无论我错在哪里,都可以纠正我。

1)我在网上读到有两种方法可以将数组传递给平衡,其中函数的形参是数组,就像int a[]和第二种方法,其中形参是像int *a一样的指针,但是看看下面的代码,传递数组的第一种技术是used.But我不明白为什么我们要传递here.In作为实际参数。我已经读到了数组balance[],它的名称,也就是“element.So”是指向第一个balance的常量指针。balance的值是第一个元素的地址(而*balance将是数组的第一个元素)。

如果形参是一个指针就好了,因为在这种情况下,地址将被赋值为形参指针的值。我不明白为什么我们有一个数组作为形参,一个地址作为实参(实参)?

代码语言:javascript
运行
复制
 #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 ", avg );

 return 0;
}
EN

回答 3

Stack Overflow用户

发布于 2015-03-30 20:47:11

像这样声明一个形参

代码语言:javascript
运行
复制
double getAverage(int arr1[], int size);
//                        ^^

与如下声明相同:

代码语言:javascript
运行
复制
double getAverage(int *arr2, int size);
//                    ^

编译器以相同的方式解释这两个声明:它允许取消引用arr1,就好像它是一个指针一样,当然它还允许对arr2应用方括号运算符,因为方括号适用于所有指针,也适用于数组。

传递balance的方法也有两种:可以像在代码片段中那样传递它

代码语言:javascript
运行
复制
avg = getAverage( balance, 5 );

或者类似于指向初始元素的指针:

代码语言:javascript
运行
复制
avg = getAverage( &balance[0], 5 );

同样,这两个调用彼此都是相同的。

票数 4
EN

Stack Overflow用户

发布于 2015-03-30 20:48:18

我不明白为什么我们有一个数组作为形式参数,一个地址作为实际参数(

)?

作为函数参数,int arr[]等同于int *arr。因此,当您将函数声明为

代码语言:javascript
运行
复制
 double getAverage(int arr[], int size);  

编译器将其解释为

代码语言:javascript
运行
复制
 double getAverage(int *arr, int size);  

这意味着,函数getAverage期望它的第一个参数是指向int (int *)的指针类型,而不是int数组。

票数 1
EN

Stack Overflow用户

发布于 2017-06-08 05:03:54

代码语言:javascript
运行
复制
#include<stdio.h>

double getAverage (int *arr, int size);

int main (void) {
    double avg;
    int balance [5]={1000, 2, 3, 17, 50};
    int *ptr;
    ptr = balance;
    avg= getAverage(ptr,5);
    printf("Average of the array is %f", avg);
    return 0;   
}

double getAverage (int *arr, int size) {
    int i;
    double sum=0.0;
    double avg=0.0;
    for (i=0; i<size; i++) {
        sum += *arr;
        arr = arr+1;
    }
    avg = (sum/size);
    return avg;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29346552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档