Предположим,
Первый случай
int a;
int *p= &a ; it works no error
Второй случай
long int a;
long int b;
b = & a; it wont work
Большинство из нас говорят, что b - это переменная, а не указатель. Но смотрите ниже.
Таким образом, вопрос в том, если &a
возвращает адрес, который является целым числом без знака, то почему мы не можем присвоить его нормальной переменной? Но почему только указатели?
Смотри ниже
b = (unsigned int) &a ; it works after typecasting though its not practicable.
Если адрес имеет целочисленный формат, то почему его не сохраняют целые числа без знака или длинные? Я думал, что за этим должен быть какой-то скрытый секрет. Кто-нибудь может это раскрыть? Я думал, что указатели должны что-то делать внутри, но мне интересно, что это будет и почему нормальная переменная не может быть.
Спасибо за все ваши ответы, кроме реального вопроса, что на самом деле возвращает &a
? Целочисленное значение или нет? если это целое число, почему переменная не может его содержать? long int a = 65535 \ valid, почему не int a = & b, если значение адреса b равно 65535
Я не беспокоюсь о том, чтобы использовать его в качестве указателя, пожалуйста, вопрос только о сохранении значения. Не ссылаясь на адрес. Люди, говорящие 32 или 64 бит, я не беспокоюсь об этом. Почему нельзя сохранить адрес, если адрес представляет собой целое число?
Я имею в виду, почему мы не можем присвоить значение, я не говорю, чтобы назначить свойства указателей на переменную, а просто назначить значение, которое это
a=65535
b = a \\ works it assigns b - 65535
&a=65535
b = & a \\ doesn't work, if address is a some integer value,why we can't store it in a variable?
Возьмем 16 бит в качестве примера. Размер нормального указателя (адреса) составляет 2 байта, а размер переменной - 2 байта. Почему мы не можем сохранить адрес в другой переменной, если адрес - целочисленное значение? увеличивает значение на 4 для указателя и значение 1 для переменной, не беспокойтесь о том, что просто присвоение значения является более важным вопросом.
b = & a ; address of a is 4000
++b ; becomes 4001 thats it,thats not a problem