Вопрос по поводу динамического выделения памяти и указателей - C (СИ)
Формулировка задачи:
void buildArray(int *arr,int lenght) { int i; arr = (int*)malloc(lenght * sizeof(int)); arr[0] = 1; arr[1] = 2; arr[2] = 3; printf("buildArray print :\n"); for(i=0;i<lenght;i++) { printf("%d\n",arr[i]); } } void main() { int *arr=NULL; int length=3; int i; buildArray(arr,length); printf("main print :\n"); for(i=0;i<length;i++) { printf("%d\n",arr[i]); } }
Решение задачи: «Вопрос по поводу динамического выделения памяти и указателей»
textual
Листинг программы
void buildArray(int** arr,int lenght) { ... *arr = (int*)malloc(lenght * sizeof(int)); ... buildArray(&arr,length);
Объяснение кода листинга программы
- В функции
buildArray
происходит динамическое выделение памяти под массив целых чисел с помощью функцииmalloc
. - В первой строке функции
buildArray
происходит приведение указателяarr
к типуint*
для корректной работы с памятью. - Затем происходит выделение памяти под массив целых чисел с помощью выражения
*arr = (int*)malloc(lenght * sizeof(int))
. В этом выраженииlenght
- это количество элементов, которые нужно разместить в массиве, аsizeof(int)
- это размер памяти, занимаемый одним элементом массива. - После вызова функции
buildArray
происходит передача адреса указателяarr
в качестве аргумента с помощью оператора&
. Это необходимо для того, чтобы функция могла изменять указатель на массив внутри вызывающей функции. - В конце вызывающей функции происходит вызов функции
buildArray
с передачей значенияlength
в качестве аргумента и сохранением результата в переменнуюarr
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д