Как можно обращаться к ячейкам памяти, выделенными функцией malloc? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Сейчас прохожу курс CS50, там есть такой код:
#include <cs50.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
 
int main(void)
{
  // get line of text
   printf("Say something: ");
    char* s = GetString();
    if (s == NULL)
    {
        return 1;
    }
 
    // allocate enough space for copy
    char* t = malloc((strlen(s) + 1) * sizeof(char));
    if (t == NULL)
    {
        return 1;
    }
 
    // copy string, including '\0' at end
    for (int i = 0, n = strlen(s); i <= n; i++)
    {
        t[i] = s[i];
    }
 
    // change copy
    printf("Capitalizing copy...\n");
    if (strlen(t) > 0)
    {
        t[0] = toupper(t[0]);
    }
 
    // print original and copy
    printf("Original: %s\n", s);
    printf("Copy:     %s\n", t);
 
    // free memory
    free(s);
    free(t);
 
    // success
    return 0;
}
где cs50.h - содержит GetString - функцию, которая запрашивает у пользователя строку. Вопрос: как здесь можно обращаться к ячейкам памяти, полученными malloc в строке 26, через указатель t, словно t - это массив? t - это же просто указатель на первую ячейку выделенного массива, что дает возможность перебирать элементы этого массива, словно t - это массив, а не указатель на этот массив? Спасибо.

Решение задачи: «Как можно обращаться к ячейкам памяти, выделенными функцией malloc?»

textual
Листинг программы
*(t + i) = *(s + i);

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

В данном коде происходит копирование элементов из одного массива в другой. Список действий:

  1. Выделение памяти под массив t с помощью функции malloc (предполагается, что t является указателем на первый элемент массива).
  2. Выделение памяти под массив s с помощью функции malloc (предполагается, что s является указателем на первый элемент массива).
  3. Инициализация счетчика i значением 0.
  4. Пока i меньше n (где n - количество элементов в массиве s), выполняется следующее действие:
    • *(t + i) обращается к элементу массива t по индексу i (счет начинается с 0).
    • *(s + i) обращается к элементу массива s по индексу i (счет начинается с 0).
    • Значение *(s + i) копируется в *(t + i) (т.е. в элемент массива t по индексу i).
  5. После завершения цикла, выделение памяти под массивы t и s освобождается с помощью функции free.

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


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

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

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