Путаница относительно постоянного указателя в C

Для const int *ptr Вы не можете изменить значение, указанное ptr

int main()
{
 const int *p;
 int a=5;
 p=&a; 
 printf("%d",++(*p));
}

Выше программы бросает мне ошибку. что достаточно справедливо.

Но почему код ниже не меняет ошибку.

int main()
{
 const int const *p;
 int a=5;
 p=&a;
 a=100; // changing the content pointed by the constant pointer

 printf("%d",(*p));
}

Я изменяю значение, указанное указателем const. т.е. я изменяю значение var a от 5 до 100?

2 ответа

утверждение a = 100; означает, что вы меняете значение на 100, используя переменную a, которая не является константой. Таким образом, вы сможете изменить значение a.

Но если вы попытаетесь запустить код ниже:

int main()
{
 const int const *p;
 int a=5;
 p=&a;
 *p=100;
// a=100;
 printf("(*p)=%d",(*p));
 return 0;
}

это даст вам ошибку, потому что указатель, с помощью которого вы должны изменить значение, указывает на место только для чтения. Поскольку вы указали значение в местоположении указателя постоянным.

Здесь a и p - две разные переменные, и они имеют свои собственные свойства.


Переменная 'a' не является постоянной, поэтому вы можете изменить ее значение. const int a = 5; не может быть изменено.

Переменная "p" указывает на значение "a", но не изменяет переменную "a" на константу.

licensed under cc by-sa 3.0 with attribution.