为了账号安全,请及时绑定邮箱和手机立即绑定

这个还有点不理解 为什么定义的replaceMax()函数第一个输入部分是个数组,在调用时为什么把输入的数组的中括号给去除了???

这个还有点不理解 为什么定义的replaceMax()函数第一个输入部分是个数组,在调用时为什么把输入的数组的中括号给去除了???
#include <stdio.h>
void replaceMax(int arr[],int value)
{
int max = arr[0];
int index = 0;
int i;
for(i=1;i<5;i++)
{
if(arr[i]>max)
{
max=arr[i]; //将数组中较大的数赋值给max
index = i; //记录当前索引


arr[index] = value;
}

int main()
{
int arr1[] = {10,41,3,12,22};
int arr2[] = {1,2,3,4,5};
int i;
replaceMax( arr1,arr2[0] ); //将数组arr1和数组arr2的第一个元素传入函数中
for(i=0;i<5;i++)
{
printf("%d ",arr1[i]); 
}
return 0; 
}

正在回答

3 回答

@onemoo 取值不是从零开始吗?arr1[n]不应该是取出arr1中的第n+1个元素吗?

0 回复 有任何疑惑可以回复我~
#1

onemoo

好吧,关注细节 +1 没错,准确地说是从数组中取出第n+1个元素。 狡辩一下,你可以把我这里理解为:我把第一个元素称为“第0元素”...
2015-07-31 回复 有任何疑惑可以回复我~

我不知道课程中讲没讲指针,这个是与指针有关的。

被声明为数组的函数参数,会被当作指向数组元素的指针类型。

数组在作右值时会被自动转换成指向数组首元素的指针,用数组向函数传参的情形就是用作右值。

如果你问为什么传参时不带中括号,那是因为数组名就是arr,你在声明arr时需要在后面加上中括号(可能还有括号中的大小),这个括号用来表明你想将arr声明为数组,而使用数组名时就只需写arr这个名字就好了。 

在使用时也写上括号的话,括号中一定会有序号,如arr1[n],这是取出arr1中的第n个元素。请注意这些写法的区别。

回到这个题,replaceMax函数的第一个参数实际上是指向int的指针,而传入arr1也会被自动转换成指向arr1首元素的指针,这样 parameter 和 argument 的类型是匹配的。

2 回复 有任何疑惑可以回复我~
#1

高朱子翼 提问者

太谢谢了 你的回答完美的解决了我的问题
2015-07-29 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

这个还有点不理解 为什么定义的replaceMax()函数第一个输入部分是个数组,在调用时为什么把输入的数组的中括号给去除了???

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信