Как можно обращаться к ячейкам памяти, выделенными функцией 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д