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