Инкремент адреса внутри функции с воздействием на внешнюю переменную - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Есть код
#include  <stdio.h>
 
void func(char *str)
{
   ++str;
}
 
int main(void)
{
    char arr[12] = "hello world";
    func(arr);
    puts(arr);
    
    return 0;
}
Инкрементируя указатель внутри функции func хочу что бы это отразилось на внейшней переменной arr, которая передается в качестве аргумента функции func. В этом примере данное сделать не получается в связи с тем, что в функцию передается копия адреса и которая связана с аргументом функции. А как сделать что бы смещение адреса отразилось на внешней переменной?

Решение задачи: «Инкремент адреса внутри функции с воздействием на внешнюю переменную»

textual
Листинг программы
    char *str = malloc(12);
    sprintf(str, "%s", "hello world");
 
    func(&str);
    puts(str);
    free(str);

Объяснение кода листинга программы

В данном коде:

  1. Выделяется память под строку с помощью функции malloc, которой передаётся размер в 12 байт.
  2. С помощью функции sprintf в выделенную память записывается строка hello world.
  3. Вызывается функция func, в которую передаётся адрес выделенной памяти с помощью оператора &.
  4. В функции func происходит инкремент адреса на 12 байт (на сколько была выделена память).
  5. После выхода из функции func вызывается функция puts, которой передаётся адрес выделенной памяти.
  6. Выделенная память освобождается с помощью функции free.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.4 из 5
Похожие ответы