На самом деле то, что вы пытаетесь из вашего рвения., Я согласен, я тоже часто так.
В первую очередь, если вы храните 13232323
в переменной указателя, шестнадцатеричное значение этого параметра равно OXC9E8C3
., Так что действительно во время назначения переменной указателя (ptr) не известно, действительно ли это действительный адрес или неверный адрес. Но когда вы разыскиваете этот адрес с *ptr
, возникает проблема. Он пытается найти значение в адресе. . Тогда есть 2 случая.
- Действительно, если то, что вы назначили, является действительным адресом, тогда оно вернет значение. (Практически невозможно)
- В основном ваш адрес будет недействительным, поэтому программа выйдет из строя (ошибка сегментации).
Таким образом, даже если ваша программа компилируется, работает, до тех пор, пока вы не сохраните действующий адрес в ptr
., ptr
не имеет никакой пользы.
Вашего Вопрос: Он работает, как это было surposed быть, за исключением того, что я не могу построить адрес, содержащего символы ABCDEF, так, что большая разница между междунаром и указателем? Е ("% d", PTR);
Я думаю, что вы просите, в любом случае, я не могу хранить ABCDEF, следовательно, ptr
работает так же, как int type
, так что разница между целыми и указателем?
Здесь:
- Вы не можете почтительное целое значение, где в качестве указателя может это сделать. Следовательно, это называется указателем :)
- Вы видите только цифры, потому что вы печатаете адрес
%d
, пытаясь распечатать %x
или %p
.
Atlast, вы обратите внимание на предупреждение компилятора, warning: assignment makes pointer from integer without a cast
, потому что ptr = j;
в этом ptr
имеет int*
типа и j
имеет int
типа.
Убедитесь, что вы включили предупреждения компилятора. Тогда причина вашей проблемы станет очевидной ... –
использовать '% x' в printf вместо'% d' – perreal
@OliCharlesworth Не появляется предупреждение, оно отлично работает, но как я могу назначить адрес, содержащий ABCDEF – user2556058