Użycie const ze wskaźnikiem może uniemożliwić zmianę wskazanego punktu przez dereferencję za pomocą odpowiedniego wskaźnika. Ale dlaczego nie mogę zmienić tego, na co wskaźnik nie wskazuje bezpośrednio?const i wskaźniki w C
Na przykład:
int a = 3;
const int* ptr = &a;
*ptr = 5;
nie będzie skompilować. Ale dlaczego nie można kompilować? Nie zmieniam tego, na co wskazuje wskaźnik.
Więc musimy powiedzieć, że używanie const ze wskaźnikiem w taki sposób nie tylko nie powoduje modyfikacji tego, na co wskazuje wskaźnik (przez dereferencję wskaźnika), ale także czegokolwiek innego, do którego adres dostajemy za pomocą wskaźnika?
Wiem, że w tym przykładzie próbuję uzyskać dostęp do nie przydzielonej pamięci, ale to tylko ze względu na dyskusję.
Czy spodziewałeś się, że kompilator przyjmie, że tylko pierwsze bajty 'sizeof (int)' to 'const'? Bardziej sensowne jest, że kompilator zakłada, że dowolny adres pamięci uzyskany za pomocą 'ptr' jest adresem tylko do odczytu (" fizycznie "tylko do odczytu lub przynajmniej tylko do odczytu w" perspektywie "funkcji, która używa' ptr '). –