#include <stdio.h>
int main (){
int x=10,*a=&x;
int *b=(int *)&a;
printf("%d %d %d %d %d %d ",x,a,*a,b,*b,**b);
return 0;
}
В этой маленькой программной переменной x
присваивается значение 10
, а затем адрес x
присваивается переменной указателя a
.Теперь правильный путь - int **b=&a
, потому что b
должен быть указателем на указатель.Но я думал, что это в конечном итоге адрес, который сохраняется.Таким образом, для хранения адреса a
с указателем на int b
я использую приведение типов int *b=(int *)&a
.Теперь адрес a
сохранен в b
.Поэтому, если я использую *b
, это даст тот же результат, что и a
.
Но когда я расширю это далее до **b
, это не даст тот же результат, что и *a
, который я ожидал.На самом деле это дает ошибку.*b
и a
одинаковы, поэтому, когда я прошу извлечь из этого значения, например **b
и *a
, это не работает.Для этого я предположил, что *b
и a
имеют одинаковое значение, но различаются по типу.Значение, заданное a
, является указателем, а значение, заданное *b
, является целым числом, поэтому **b
невозможно, например, *a
.
Но я все же думаю, что оно должно работать.
Я использую Dev C ++ 4.9.9.2, который является 32-битным компилятором.Память, выделенная для int
и int *
, одинакова, то есть 4 байта.И *b
и a
также имеют одинаковое представление битов.Поэтому, когда я пишу *(*b)
, я использовал то же значение, что и в *(a)
.Но что является препятствующим фактором?Формат подобен *(some bit representation)
, а битовое представление идентично в случае *b
и a
.Таким образом, значение x
должно быть восстановлено.Пожалуйста, объясните фактор предотвращения.