Указание на переменную, которая существует только внутри функции C - PullRequest
1 голос
/ 15 марта 2019

В настоящее время я пытаюсь выучить C, читая «Язык программирования C».Я пытаюсь вычислить такие вещи, как указатели, но я натолкнулся на пример, который я не могу понять.
Пример .
Массив указателей передается в качестве параметра дляданная функция и, на мой взгляд, указывает на переменные, которые были созданы внутри функции.

lineptr[nlines++] = p;

Является ли это жизнеспособным только из-за ранее используемой функции alloc?Как это работает, это безопасный способ кодирования или его следует избегать?

1 Ответ

2 голосов
/ 15 марта 2019

Как вы сказали, вход в lineptr - это массив указателей. Надеемся, что все они равны NULL, потому что в противном случае у нас будет утечка памяти, но все же у нас есть наш массив.

p0 | p1 | p2 | p3 |...

alloc выделяет некоторый кусок памяти размером len, который (будучи очень свободным с терминологией здесь) «живет» где-то за пределами функции. Он возвращает указатель на эту память. Затем мы можем поместить этот указатель в массив.

Когда функция вернется, вызывающая сторона сможет получить доступ к памяти, выделенной alloc, которая «живет» вне функции через указатель, хранящийся в массиве.

Если вы можете объяснить более подробно, почему вас беспокоит этот код, возможно, для вас найдется лучший ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...