Может кто-нибудь сказать, почему массив не изменяется при передаче в функцию - PullRequest
1 голос
/ 02 июля 2019

Я думаю, что вывод должен быть 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 ]

4 голосов
/ 02 июля 2019

С arr=&i вы меняете локальный указатель на массив и позволяете ему указывать куда-то еще;тем не менее вы не изменяете содержимое исходного массива.

Запись arr[0]=10, и это должно дать вам вывод 1010.

0 голосов
/ 03 июля 2019

В основном то, что сказал Стефан.Вы изменили адрес arr [0] так, чтобы он указывал на адрес i.Когда foo завершил выполнение, он удалил копию обр.Исходный массив был скопирован, когда вы передали его функции в параметре (c - язык передачи по значению)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...