我编写了一个包含数组作为参数的函数,并通过如下传递数组的值来调用它。
void arraytest(int a[]) { // changed the array a a[0]=a[0]+a[1]; a[1]=a[0]-a[1]; a[0]=a[0]-a[1]; }
void main() { int arr[]={1,2}; printf("%d \t %d",arr[0],arr[1]); arraytest(arr); printf("\n After calling fun arr contains: %d\t %d",arr[0],arr[1]); } 我发现虽然我arraytest()通过传递值来调用函数,但原始副本int arr[]已更改。
你能解释为什么吗? 问题来源于stack overflow
当传递数组作为参数时,这
void arraytest(int a[]) 的意思与
void arraytest(int *a) 所以您要修改main中的值。
由于历史原因,数组不是一等公民,因此不能按值传递。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。