Значение константных указателей как параметров функции
У меня есть эта функция подписи:
void myFunction(int *const ptr);
Какой смысл const
Ключевое слово в этом конкретном контексте?
Даже если ptr
не был const
переменная, я не мог изменить на какой адрес он указывает, потому что он передается по значению, поэтому, если бы у меня была другая функция, подобная этой:
void myAnotherFunction(int *ptr);
И внутри своей реализации сделал что-то вроде этого:
//...
ptr = malloc(1023);
//...
Это не повлияет на переданное значение (конечно, за пределами этой функции).
Итак, вопрос в том, какой смысл использовать myFunction()
подпись вместо myAnotherFunction()
один? (кроме этого вы получаете ошибку во время компиляции).
2 ответа
ptr = malloc(1023); Это не повлияет на переданное значение (конечно, за пределами этой функции).
Подводить итоги. Действительно, таким образом оригинальный указатель не будет затронут (он все равно будет указывать на тот же объект, потому что ptr
является копией исходного указателя), но вы все равно можете сделать этот указатель указателем на другой объект внутри myAnotherFunction
и изменить значение этого объекта через этот указатель. например, в myAnotherFunction
Вы могли бы сделать:
ptr = &y;
*ptr = 9;
Принимая во внимание, что в первом случае, когда у вас есть постоянный указатель, вы не можете назначить ему новый адрес, но вы все равно можете изменить значение объекта, на который он указывает, с помощью разыменования. Постоянный указатель означает, что вы не можете назначить ему новый адрес, указатель на постоянный объект означает, что вы не можете изменить значение объекта, на который он указывает, но вы можете назначить новый адрес указателю.
Это может иметь больше смысла, если учесть, что функция
void myFunction(int *const ptr);
может манипулировать многими указателями ввода, назначать их и переназначать их, и инвариант алгоритма, который он выполняет, состоит в том, что указатель ввода никогда не должен изменяться. Затем, маркируя это const
может быть очень полезным, или, по крайней мере, заставить вас чувствовать себя более уверенным, что он был реализован правильно.