若用数组名作为函数调用时的实参,则实际上传递给形参的是______。 A、数组首地址 B、数组的第一个元素 C、

若用数组名作为函数调用时的实参,则实际上传递给形参的是______。 A、数组首地址 B、数组的第一个元素 C、,第1张

fun(int a)

{

a = 10;

}

void main()

{

int b = 10;

fun(b);

]

a就是形参,在函数的定义中,放在括号里声明的变量

b是实参,就是调用函数时,传入的参数

数组在进行形参实参结合的时候,就是传递数组的首地址。并不是把整个数组拷贝一份放入函数里运行

要将数组长度作为一个参数传给average函数,不能在average函数内部通过int arrLen = sizeof(a) / 4;来计算数组长度。因为float average(float a[10])就相当于float average(float a) ,所以sizeof(a)恒等于4,sizeof(a) / 4恒等于1。

应该这样:

float average(float a[10],int arrLen) {

float sumSco = 0;

for (int i = 0; i < arrLen; i++)

{

sumSco += a[i];

}

return sumSco / arrLen;

}

可以的啊。

如果你认为void func(int a[])这样的形参不是数组,那么作为实参的时候的数组名也不能称之为数组了,因为它实际上只表示第一个元素的地址而已,根本不表示整个数组。因此,如果老师讲“数组只能做函数实参而不能做函数形参”那是不负责任的。

因为在编译的时候数组被看成是指针·~所以没有差别

int

x[10];

int

p=x;

那么x[1]实际上就是(p+1)。

p是变量,能存储地址,

数组x是地址常量

//都是被看成地址,只不过一个是变量,一个是常量

至于为什么都能被当成参数

就好比调用函数fun(3);

fun(x)

常量变量都可以。

形参的话写成x[]这样的形式是为了表明指针是指向数组。//只是为了清晰,实质形参都是指针。

而实参就是指针和数目名都可以~~//即实参可以是变量常量,形参都是被看成变量~~

若使用一维数组名作函数实参,必须在主调函数中说明此数组的大小。

关于用数组名作函数参数有两点要说明:

(1) 如果函数实参是数组名,形参也应为数组名(或指针变量),形参不能声明为普通变量(如int array;)。实参数组与形参数组类型应一致(现都为int型),如不一致,结果将出错。

(2) 需要特别说明的是: 数组名代表数组首元素的地址,并不代表数组中的全部元素。

因此用数组名作函数实参时,不是把实参数组的值传递给形参,而只是将实参数组首元素的地址传递给形参。形参可以是数组名,也可以是指针变量。

它们用来接收实参传来的地址。如果形参是数组名,它代表的是形参数组首元素的地址。在调用函数时,将实参数组首元素的地址传递给形参数组名。这样,实参数组和形参数组就共占同一段内存单元。

声明形参数组并不意味着真正建立一个包含若干元素的数组,在调用函数时也不对它分配存储单元,只是用array[]这样的形式表示array是一维数组名,以接收实参传来的地址。

因此array[]中方括号内的数值并无实际作用,编译系统对一维数组方括号内的内容不予处理。形参一维数组的声明中可以写元素个数,也可以不写。

扩展资料:

形参和实参的区别和联系:

1、形参变量只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参变量只有在函数内部有效,不能在函数外部使用。

2、实参可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参,所以应该提前用赋值、输入等办法使实参获得确定值。

3、实参和形参在数量上、类型上、顺序上必须严格一致,否则会发生“类型不匹配”的错误。当然,如果能够进行自动类型转换,或者进行了强制类型转换,那么实参类型也可以不同于形参类型。

4、函数调用中发生的数据传递是单向的,只能把实参的值传递给形参,而不能把形参的值反向地传递给实参;换句话说,一旦完成数据的传递,实参和形参就再也没有瓜葛了,所以,在函数调用过程中,形参的值发生改变并不会影响实参。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12188583.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存