我对指针和arrays.Please有一些疑问,无论我错在哪里,都可以纠正我。
1)我在网上读到有两种方法可以将数组传递给平衡,其中函数的形参是数组,就像int a[]和第二种方法,其中形参是像int *a一样的指针,但是看看下面的代码,传递数组的第一种技术是used.But我不明白为什么我们要传递here.In作为实际参数。我已经读到了数组balance[],它的名称,也就是“element.So”是指向第一个balance的常量指针。balance的值是第一个元素的地址(而*balance将是数组的第一个元素)。
如果形参是一个指针就好了,因为在这种情况下,地址将被赋值为形参指针的值。我不明白为什么我们有一个数组作为形参,一个地址作为实参(实参)?
#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;
}
发布于 2015-03-30 20:47:11
像这样声明一个形参
double getAverage(int arr1[], int size);
// ^^
与如下声明相同:
double getAverage(int *arr2, int size);
// ^
编译器以相同的方式解释这两个声明:它允许取消引用arr1
,就好像它是一个指针一样,当然它还允许对arr2
应用方括号运算符,因为方括号适用于所有指针,也适用于数组。
传递balance
的方法也有两种:可以像在代码片段中那样传递它
avg = getAverage( balance, 5 );
或者类似于指向初始元素的指针:
avg = getAverage( &balance[0], 5 );
同样,这两个调用彼此都是相同的。
发布于 2015-03-30 20:48:18
我不明白为什么我们有一个数组作为形式参数,一个地址作为实际参数(
)?
作为函数参数,int arr[]
等同于int *arr
。因此,当您将函数声明为
double getAverage(int arr[], int size);
编译器将其解释为
double getAverage(int *arr, int size);
这意味着,函数getAverage
期望它的第一个参数是指向int
(int *
)的指针类型,而不是int
数组。
发布于 2017-06-08 05:03:54
#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;
}
https://stackoverflow.com/questions/29346552
复制相似问题