поэтому, если у меня есть что-то подобное в C++:
char A_char = 'A';
char * myPtr = &A_char;
const char * myPtr = &char_A; //pointers that point to constants
char * const myPtr = &char_A; //constant pointers
const char * const myPtr = &char_A; //constant pointers that point to constants
Мне было интересно, где и почему мы используем "указатели, указывающие на константы", "постоянные указатели" и "постоянные указатели, указывающие на константы" в программировании. Я знаю различия между ними и их синтаксисом, но я понятия не имею, где и почему мы их используем. Вы могли бы объяснить? Спасибо, парни.
Поскольку вы запрашиваете примеры использования:
Типичное использование для указателя на постоянный символ - это перемещение указателей в постоянную память (например, строковые литералы). Эта память может быть разыменована, но не изменена (неопределенное поведение)
const char* myPtr = "this is read only memory";
Постоянный указатель на символ может использоваться для перемещения вокруг местоположения буфера, который может быть изменен, но местоположение не может быть изменено (т.е. Вам нужно специально использовать эту область памяти)
char * const myPtr = some_buffer_location;
printBuffer(myPtr);
void copyToBuffer(char * const &pointer_to_buffer /* Reference to pointer */) {
const char* my_contents = "this is my content";
strcpy(pointer_to_buffer, my_contents); // Buffer contents can be changed
// pointer_to_buffer = NULL; - error! Not assignable
}
Комбинацию вышеизложенного можно использовать для передачи области памяти только для чтения и обеспечения того, что указанный адрес остается неизменным, а его содержимое остается неизменным.
Достижение полной const-correctness чрезвычайно тяжело, но если кто-то желает преследовать эту цель, необходима правильная комбинация вышеуказанных флагов.
Постоянный указатель - это указатель, который не может изменить адрес, который он удерживает.
<type of pointer> * const <name of pointer>
Указатель, через который нельзя изменить значение переменной, указывает его как указатель на константу.
const <type of pointer>* <name of pointer>
Постоянным указателем на константу является указатель, который не может ни изменить адрес, на который он указывает, ни изменить значение, сохраненное на этом адресе.
const <type of pointer>* const <name of pointer>
Вы можете найти более подробную информацию об их использовании здесь: http://www.codeguru.com/cpp/cpp/cpp_mfc/general/article.php/c6967/Constant-Pointers-and-Pointers-to-Constants.htm
Если данные не должны меняться:
Используйте указатель на постоянные данные. const char * myPtr = &char_A;
Если данные могут измениться, но указанная память не должна:
Используйте постоянный указатель: char * const myPtr = &char_A;
Если данные не должны меняться, а указанная память не должна изменяться:
Используйте постоянный указатель на постоянные данные: const char * const myPtr = &char_A;
На самом деле это не так уж и много.