Как можно обращаться к ячейкам памяти, выделенными функцией malloc? - C (СИ)
Формулировка задачи:
Сейчас прохожу курс CS50, там есть такой код:
где cs50.h - содержит GetString - функцию, которая запрашивает у пользователя строку.
Вопрос: как здесь можно обращаться к ячейкам памяти, полученными malloc в строке 26, через указатель t, словно t - это массив? t - это же просто указатель на первую ячейку выделенного массива, что дает возможность перебирать элементы этого массива, словно t - это массив, а не указатель на этот массив? Спасибо.
Листинг программы
- #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;
- }
Решение задачи: «Как можно обращаться к ячейкам памяти, выделенными функцией malloc?»
textual
Листинг программы
- *(t + i) = *(s + i);
Объяснение кода листинга программы
В данном коде происходит копирование элементов из одного массива в другой. Список действий:
- Выделение памяти под массив
t
с помощью функцииmalloc
(предполагается, чтоt
является указателем на первый элемент массива). - Выделение памяти под массив
s
с помощью функцииmalloc
(предполагается, чтоs
является указателем на первый элемент массива). - Инициализация счетчика
i
значением 0. - Пока
i
меньшеn
(гдеn
- количество элементов в массивеs
), выполняется следующее действие:*(t + i)
обращается к элементу массиваt
по индексуi
(счет начинается с 0).*(s + i)
обращается к элементу массиваs
по индексуi
(счет начинается с 0).- Значение
*(s + i)
копируется в*(t + i)
(т.е. в элемент массиваt
по индексуi
).
- После завершения цикла, выделение памяти под массивы
t
иs
освобождается с помощью функцииfree
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д