Согласно нескольким источникам, указатель p
указывает на значение, когда оно разыменовано. Таким образом, мы можем сказать, что указатель содержит адрес в качестве своего значения, и когда используется оператор разыменования (*
), возвращается значение по адресу.
Указатель может быть присвоено значение следующим образом:
int a = 90;
int *p = &a;
если мы назначим указатель, его значение будет следующим:
int *p;
*p = 60;
60 выделяется для p
и вызывает неопределенное поведение при разыменовании, поскольку 60 не является допустимым адресом. (Согласно ответу на этот вопрос).
Однако для следующего кода:
int a = 90;
int *p = &a;
printf ("p is %d \n",*p);
printf ("a is %d \n", a);
printf ("address is %p \n",p);
*p = 100;
printf ("p is %d \n",*p);
printf ("a is %d \n", a);
printf ("address is %p \n",p);
Получен следующий вывод:
р — 90
а — 90
адрес — 0028FED8p равно 100
a равно 100 адрес 0028FED8
т. е. выражение *p = 100
изменяет значение в a
, а не значение, содержащееся в p
.
КАК ??????
%p
, а не%d
- person phuclv   schedule 26.11.2016