Инкремент адреса внутри функции с воздействием на внешнюю переменную - 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.