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

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

#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 回答

#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,一样一样的

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

肖科夫斯基

change(a)只是把3传递进去了,而执行了change函数并没有改变什么。用另一种方法,比如change函数用int类型,return b的值,然后引用的时候改成a=change(a);这个方案我之前试过,但是没学指针之前确实不太理解为什么之前那种不行。数组应该就是楼上那位说的原因吧。
2017-12-28 回复 有任何疑惑可以回复我~
#2

慕姐5552928 提问者

非常感谢!
2017-12-28 回复 有任何疑惑可以回复我~

数组是分配好内存的,是有明确的地址的,所以被调函数里的值变了,也就影响了在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;

}

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

肖科夫斯基

你这个我昨天试过了,不行的
2017-12-27 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

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