Массивы переменной длины не допускаются.Но потом я недавно узнал, что пользовательская функция манипулирует исходным массивом, а не собственной копией.Поэтому я подумал о создании функции, которая получает желаемый размер массива пользователем и, следовательно, об изменении размера (я также инициализировал массив в этой функции).
void fill_array(int array[], int size, int in_val);
void main(){
int n, value, list[1], ctr;
clrscr();
printf("Enter the size of the array: ");
scanf("%d", &n);
printf("Enter the value that you want all of the elements to take initially: ");
scanf("%d", &value);
printf("\nAfter scanning value, n = %d\n", n);
fill_array(list, n, value);
printf("\nAfter Function fill_array Execution");
printf("\nThe values of each element of the array is now: %d ", list[0]);
printf("%d ", list [1]);
printf("%d ", list [2]);
printf("\nn = %d\n", n);
printf("value = %d\n", value);
getch();
}
void fill_array(int array[], int size, int in_val){
int ctr;
for (ctr = 0; ctr < size; ++ctr)
array[ctr] = in_val;
printf("\nInside Function");
printf("\nn = %d\n", size);
printf("value = %d\n", in_val);
}
Вот консоль / пример прогона:
Enter the size of the array: 3
Enter the value that you want all of the elements to take initially: 444
After scanning value, n = 3
Inside Function
n = 3
value = 444
После функции fill_array
Выполнение
Значение каждого элемента массива теперь равно: 444444 444
n = 444
значение = 444
Функция изменила list
.Однако, как вы можете видеть, оно также изменило значение n
.После каждого выполнения fill_array
, n
всегда равняется value
.Кто-нибудь, пожалуйста, объясните мне, почему функция меняет значение n
.Я не хочу, чтобы значение n
изменилось.