为什么数组中某一个元素的值可以在函数中被改变,如果是单一变量就不可以?

来源:6-4 数组作为函数参数

慕姐5552928

2017-12-26 16:40

#include<stdio.h>

void change(int b)
{
	b = 5;
}

int main()
{
	int a=3;
	change(a);
	printf("%d\n",a);
	return 0;
}

这个代码执行出来的结果还是3,change函数里的操作不影响main函数里定义的a的值

#include<stdio.h>

void change(int arr1[])
{
	arr1[0]= 3;
}

int main()
{
	int arr[]={1,2,3};
	change(arr);
	printf("%d\n",arr[0]);
	return 0;
}

但是对于数组来言,在change函数里改变了只是作为形参的arr1的一个元素的值,却影响了在main函数中定义的arr的第一个元素的值。

求解释,谢谢

写回答 关注

2回答

  • 肖科夫斯基
    2017-12-28 13:42:47
    已采纳

    #include<stdio.h>

    void change(int *b)

    {

        *b = 5;

    }

    int main()

    {

        int a=3;

        change(&a);

        printf("%d\n",a);

        return 0;

    }

    //这个要用到指针,具体你可以参见Linux C语言 初始指针与内存教程的2.1,一样一样的

    慕姐5552...

    非常感谢!

    2017-12-28 14:51:36

    共 2 条回复 >

  • qq_小灰羊_1
    2017-12-27 10:44:37

    数组是分配好内存的,是有明确的地址的,所以被调函数里的值变了,也就影响了在main函数中。

    如果是第一种,就要把值返回来,用return b

    int  change(int b)      //返回类型为整形 ,用int

    {

        b = 5;

        return b  ;  //

    }

     

    int main()

    {

        int a=3;

        a=change(a);    //

        printf("%d\n",a);

        return 0;

    }

    肖科夫斯基

    你这个我昨天试过了,不行的

    2017-12-27 10:59:09

    共 1 条回复 >

C语言入门

C语言入门视频教程,带你进入编程世界的必修课-C语言

926286 学习 · 20799 问题

查看课程

相似问题