Массив модифицируется не int при вызове в функции - PullRequest
0 голосов
/ 24 ноября 2018

Когда я запускаю эту программу -

#include <stdio.h>
void inc( int num[], int n)
{
  int i;
  n++;
  for(i=0;i<10;i++)
    num[i]++;
}

int main()
{
  int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
  int a=2;
  inc (arr, a);
  int i; 
  for(i=0;i<10;i++)
    printf("%d  ", arr[i]); 
  printf("\n%d  ", a);
return 0;
}

Я получаю вывод -

2  3  4  5  6  7  8  9  10  1                                                                                                                  
2

Я понимаю, почему int не изменяется, но я не понимаю, почему массив получаетизменилось, так как я не использовал указатели для вызова массива.Я знаю, что функция сделает другую копию n и назначит n = a, и все изменения произойдут только с n, и a останется неизменным.Почему массив меняется?

1 Ответ

0 голосов
/ 24 ноября 2018

В C, за исключением нескольких случаев , имя массива затухает (= неявно преобразуется) в указатель на его первый элемент.

This

void inc(int num[], int n)

точно такой же, как этот:

void inc(int *num, int n)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...