Вопрос по поводу динамического выделения памяти и указателей - 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]);
    }
}
Вопрос такой почему в майне после вызова функции buildArray указатель arr все ещё равен null?

Решение задачи: «Вопрос по поводу динамического выделения памяти и указателей»

textual
Листинг программы
void buildArray(int** arr,int lenght)
{
...
    *arr = (int*)malloc(lenght * sizeof(int));
...
 
buildArray(&arr,length);

Объяснение кода листинга программы

  1. В функции buildArray происходит динамическое выделение памяти под массив целых чисел с помощью функции malloc.
  2. В первой строке функции buildArray происходит приведение указателя arr к типу int* для корректной работы с памятью.
  3. Затем происходит выделение памяти под массив целых чисел с помощью выражения *arr = (int*)malloc(lenght * sizeof(int)). В этом выражении lenght - это количество элементов, которые нужно разместить в массиве, а sizeof(int) - это размер памяти, занимаемый одним элементом массива.
  4. После вызова функции buildArray происходит передача адреса указателя arr в качестве аргумента с помощью оператора &. Это необходимо для того, чтобы функция могла изменять указатель на массив внутри вызывающей функции.
  5. В конце вызывающей функции происходит вызов функции buildArray с передачей значения length в качестве аргумента и сохранением результата в переменную arr.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.583 из 5
Похожие ответы