Если вы передаете значение или указатель на стек, то память, необходимая для хранения этого значения, выделяется в стеке ...
Как работает стек, вы можете сохранить "выделение «больше памяти, но оно должно быть« освобождено »в обратном порядке.
Итак:
void f(int *ptr, int v)
{
// Do something
}
Когда вы вызываете f (), значения ptr и v« помещаются »встек, то есть достаточно памяти волшебным образом создается для хранения этих значений.Когда функция возвращает стек, он корректируется другим способом, в некотором смысле они «выталкиваются» из стека.
Это нажатие и выталкивание не влияют на исходный указатель или значение.Итак:
ptr++;
Будет не влиять на значение указателя, удерживаемого вызывающей функцией.
Если вы разыменуете, * ptr, указатель, к которому вы обращаетесьте же данные, которые видны снаружи функции.Если вы освободите () указатель, это повлияет на то, что видно снаружи функции.Таким образом, когда вы передаете указатель, копии исходных данных, на которые указывает указатель, отсутствуют, но есть копия действительного указателя.Указатель передается по значению.