C копирует указатели, которые передаются в функции в качестве параметров.Таким образом, внутри функции вы управляете копией указателя, а не самим указателем.При выходе из функции указатель, если он был изменен, как в
while (p++) if (*p = '\0') break; //example
, вернется к своему предыдущему значению, и копия будет уничтожена.Объект ячейки памяти, на который указывает указатель, может быть изменен, и в этом вся идея передачи по ссылке .Распространенной ошибкой является попытка обнулить указатель внутри функции, а затем обнаружить, что он не является нулевым по возвращении из функции.В некоторых системах вы получаете указатель, указывающий на мусор или плохие места в памяти, которые вызывают сбой вашей программы при попытке чтения или записи в переменную.
void f(char* s)
{
/* code stuff */
...
s = NULL;
...
return;
}
по возвращении из f теперь с =?(предыдущее значение, NULL или GARBAGE) Это чаще всего случается с переменными, передаваемыми в функции, определенные в отдельных модулях, которые принимают значения по ссылке или в разных контекстах выполнения (например, потоки или общая память между процессами).