int arr[10];
объявляет массив из 10 int
элементов в стеке.Его элементы неинициализированы.Если вы попытаетесь получить к ним доступ без инициализации, как в случае с fun(4)
, вы можете увидеть значения мусора, вы можете увидеть старое содержимое памяти (как вы это делали здесь), или вы можете аварийно завершить программу с ошибкой сегментации, еслистраница памяти принадлежит другой программе.Вы даже можете получить ожидаемый результат!Фактически, может произойти все что угодно, потому что поведение не определено спецификацией.
Чтобы соответствовать вашим ожиданиям, инициализируйте массив любым способом, который вы выберете, например, одним из следующих:
int arr[10] = {};
int arr[10] = {0};
int arr[10];
memset(arr, 0, sizeof(int) * 10);
int arr[10];
for (int i = 0; i < 10; i++) {
arr[i] = 0;
}
и т. Д.