任何人都可以说为什么传递给函数时不更改数组

时间:2019-07-02 19:47:15

标签: c gcc

我认为输出应该是10 10,但是它是10 1,为什么是idk。

我尝试分配arr [0] = 55,这使我成为55个idk,原因之一。很高兴有一个解释

void foo(int arr[])
{
  int i=10;
  arr=&i;
  printf("%d",arr[0]);
}

int main() 
{
  int a[4]={1,2,3,4};
  foo(a);
  printf("%d",a[0]);
  return 0;
}

我的想法:1010 实际o / p = 101

2 个答案:

答案 0 :(得分:4)

使用arr[0]=10,您可以将本地指针更改为数组,并使其指向其他位置。但是您不会更改原始数组的内容。

编写1010,它应该给您{{1}}输出。

答案 1 :(得分:0)

基本上是斯蒂芬所说的。 您修改了arr [0]的地址以指向i的地址。当foo完成执行时,它删除了arr的副本。当您将原始数组传递给参数中的函数时,它已被复制(c是按值传递语言)