问答详情
源自:6-4 数组作为函数参数

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;    
}

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

提问者:那谁很靠谱3587144 2016-11-01 15:29

个回答

  • JustWannaHugU
    2016-11-01 16:37: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++)//目的是找出最大值的索引
        {
            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;    
    }


  • 那谁很靠谱3587144
    2016-11-01 16:12:57

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

    #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;    

    }