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

6-4数组作为函数参数

//以下注释,请根据程序的运行顺序查看,此程序目的是替换指定数组中的最大元素
//看了各路大神的指正,以下更新之后的答案,跟着程序运行一步一步的走,并且还看不懂的同学私信,一起探讨
#include <stdio.h>
void a(int arr[],int value)//a(arr1[5],1)
{
    int max = arr[0];//max==arr[0]==arr1[0]==10
    int index = 0;
    int i;
    for(i=1;i<5;i++)//1,2,3,4,5(比较后不在执行)
    {
        if(arr[i]>max)//41>10,3>41,12>41,22>41
        {
            max=arr[i];//max=41,不执行,不执行,不执行     //将数组中较大的数赋值给max
            index = i;//index=1,不执行,不执行,不执行
        }                
    }  
    arr[index] = value;//arr[index]==arr[1]==41=(赋值)1
}//这个函数运行完之后arr1[]={10,1,3,12,22}

int main()
{
    int arr1[5] = {10,41,3,12,22};
    int arr2[5] = {1,2,3,4,5};
    int i;
    a(arr1,arr2[0]); 
    for(i=0;i<5;i++)
    {
        printf("%d ",arr1[i]);                
    }
    return 0;    
}

谢谢大神解惑,解释的越详细越好,谢谢大神

正在回答

2 回答

#include <stdio.h>
void a(int arr[],int value)//a(arr1[5],1)
{
    int max = arr[0];//max==arr[0]==arr1[0]==10
    int index = 0;
    int i;
    for(i=1;i<5;i++)//目的是找出最大值的索引
    {
        if(arr[i]>max)//41>10,3>41,12>41,22>41
        {
            max=arr[i]; //将数组中较大的数赋值给max
            index = i;//index=1是最终结果
        }                
    }  
    arr[index] = value;//arr[index]==arr[1]==10=(赋值)1,对的
}//这个函数运行完之后arr1[]={10,1,3,12,22},没错
//你的困惑是为什么函数中改变了,main方法中输出的数组就改变了,这是因为arr[]相当于一个
//指向数组首地址的const指针,函数中对整数的改变其实就是对实际数组的改变
int main()
{
    int arr1[5] = {10,41,3,12,22};
    int arr2[5] = {1,2,3,4,5};
    int i;
    a(arr1,arr2[0]); 
    for(i=0;i<5;i++)
    {
        printf("%d ",arr1[i]);                
    }
    return 0;    
}


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

那谁很靠谱3587144 提问者

非常感谢!
2016-11-01 回复 有任何疑惑可以回复我~
#2

春枫十里不如妮

非常感谢,瞬间开窍。
2019-05-02 回复 有任何疑惑可以回复我~

//以下注释,请根据程序的运行顺序查看,此程序目的是替换指定数组中的最大元素

#include <stdio.h>

void a(int arr[],int value)//a(arr1[5],1)

{

    int max = arr[0];//max==arr[0]==arr1[0]==10

    int index = 0;

    int i;

    for(i=1;i<5;i++)//1,2,3,4,5(比较后不在执行)

    {

        if(arr[i]>max)//41>10,3>41,12>41,22>41

        {

            max=arr[i];//max=41,不执行,不执行,不执行     //将数组中较大的数赋值给max

            index = i;//index=1,不执行,不执行,不执行

        }                

    }  

    arr[index] = value;//arr[index]==arr[1]==10=(赋值)1

}//这个函数运行完之后arr1[]={10,1,3,12,22}


int main()

{

    int arr1[5] = {10,41,3,12,22};

    int arr2[5] = {1,2,3,4,5};

    int i;

    a(arr1,arr2[0]); 

    for(i=0;i<5;i++)

    {

        printf("%d ",arr1[i]);                

    }

    return 0;    

}


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

那谁很靠谱3587144 提问者

哈哈,看了好长时间,根据程序运行顺序一步一步的跟,一步一步的写注释,应该就是理解的样子了,要是有大神看到我可能哪里理解的不对了,麻烦指出一下,新人小白感激不尽!
2016-11-01 回复 有任何疑惑可以回复我~
#2

米斯塔J3938870 回复 那谁很靠谱3587144 提问者

不理解 if(arr[i]>max)//41>10,3>41,12>41,22>41这句,上面不是定义max=10吗?不是应该//41>10,3<10,12>10,22>10吗?
2016-11-01 回复 有任何疑惑可以回复我~
#3

那谁很靠谱3587144 提问者 回复 米斯塔J3938870

if下面的代码有解释啊 max=arr[i];//max=41,不执行,不执行,不执行
2016-11-02 回复 有任何疑惑可以回复我~
#4

米斯塔J3938870 回复 那谁很靠谱3587144 提问者

嗯我懂了
2016-11-02 回复 有任何疑惑可以回复我~
#5

那谁很靠谱3587144 提问者 回复 米斯塔J3938870

加油!(ง •_•)ง
2016-11-02 回复 有任何疑惑可以回复我~
#6

zfxx87 回复 那谁很靠谱3587144 提问者

您好!arr[index] = value;//arr[index]==arr[1]==10=(赋值)1这句能解释一下吗?看不明白。arr[index] = value;这里是不是说arr[1]赋值value(value又是arr2[0]=1),所以arr[1](原值41)现在变成arr[0](值为1)???那您的arr[1]==10是哪里来的呢?刚学,没看懂。
2016-11-18 回复 有任何疑惑可以回复我~
#7

zfxx87 回复 zfxx87

您好!arr[index] = value;//arr[index]==arr[1]==10=(赋值)1这句能解释一下吗?看不明白。arr[index] = value;这里是不是说arr[1]赋值value(value又是arr2[0]=1),所以arr[1](原值41)现在变成arr2[0](值为1)???那您的arr[1]==10是哪里来的呢?刚学,没看懂。上面打错了。
2016-11-18 回复 有任何疑惑可以回复我~
#8

那谁很靠谱3587144 提问者 回复 zfxx87

跟着程序的运行和我写的注释看一遍,要是还看不懂,私信我吧
2016-11-21 回复 有任何疑惑可以回复我~
#9

那谁很靠谱3587144 提问者 回复 zfxx87

多谢指正!!!!
2016-11-21 回复 有任何疑惑可以回复我~
查看6条回复

举报

0/150
提交
取消

6-4数组作为函数参数

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