const char* вопрос
Если для const int* нельзя присвоить литерал, а также изменить уже присвоенное значение l-value (логично),то почему для const char* можно присвоить литерал, да еще и изменить в последствии значение? Хотя пишут, что меняется не значение, а переназначается указатель, в таком случае мы цепляем наш указатель к загаданной строке "example" из всей Вселенной? Тогда почему адрес выводится один и тот же на выходе?
#include <iostream>
int main()
{
int value1{5};
int value2{6};
int* value3=&value1;
std::cout<<"&value3="<<value3<<'\n';
std::cout<<"\t&value1="<<&value1<<'\n';
value3=&value2;
std::cout<<"&value3="<<value3<<'\n';
const char* a{"stroka1"};
a="abcd";
std::cout<<"&a="<<&a<<'\n';
a="efg";
std::cout<<"&a="<<&a<<'\n';
std::cout<<a;
return 0;
}
Ответы (1 шт):
Автор решения: AlexGlebe
→ Ссылка
Константность определяет тип на что указывает переменная, а не само его значение (указатель). Примеры объявления константности :
// указатель на константные буквы
const char * a {"stroka1"};
// то же самое
char const * a {"stroka2"};
// a - константный указатель на буквы,
// которые можно менять, но сам указатель - нет
char s [ ] = "stroka3" ;
char * const a = s ;
// константный указатель на константные буквы
char const * const a {"stroka4"};
Теперь адрес & a - выдаёт адрес, где хранится значение переменной, а не само его значение.
char const * a {"stroka"};
// a - имеет тип указателя на буквы
// char const *
// & a - это адрес указателя на переменную которая тоже указатель
// char const * *
С типом int * - то же самое.
// переменная целочисленного типа
int i ;
// адрес переменной i
int * pi = & i ;
// & i - адрес переменной целого числа с типом
// int *
// & pi - адрес переменной с типом указателя на указатель, имеющее тип
// int * *