Инкремент адреса внутри функции с воздействием на внешнюю переменную - C (СИ)
Формулировка задачи:
Есть код
Инкрементируя указатель внутри функции func хочу что бы это отразилось на внейшней переменной arr, которая передается в качестве аргумента функции func. В этом примере данное сделать не получается в связи с тем, что в функцию передается копия адреса и которая связана с аргументом функции. А как сделать что бы смещение адреса отразилось на внешней переменной?
#include <stdio.h> void func(char *str) { ++str; } int main(void) { char arr[12] = "hello world"; func(arr); puts(arr); return 0; }
Решение задачи: «Инкремент адреса внутри функции с воздействием на внешнюю переменную»
textual
Листинг программы
char *str = malloc(12); sprintf(str, "%s", "hello world"); func(&str); puts(str); free(str);
Объяснение кода листинга программы
В данном коде:
- Выделяется память под строку с помощью функции
malloc
, которой передаётся размер в 12 байт. - С помощью функции
sprintf
в выделенную память записывается строкаhello world
. - Вызывается функция
func
, в которую передаётся адрес выделенной памяти с помощью оператора&
. - В функции
func
происходит инкремент адреса на 12 байт (на сколько была выделена память). - После выхода из функции
func
вызывается функцияputs
, которой передаётся адрес выделенной памяти. - Выделенная память освобождается с помощью функции
free
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д