Я написал следующий Кодекс.Как распределяется память для переменных разных типов данных?
#include<stdio.h>
int main()
{
int x = 1 ;
int *j = &x ;
int y = 2 ;
int *t = &y ;
printf("%p\n" , (void *)j);
printf("%p" , (void *)t);
}
Выход 0028FF14 0028FF10
.
Точка, которую я хочу сделать, заключается в том, что разница между адресами равна «4».
В то время как в этом случае
#include<stdio.h>
int main()
{
char x = 't' ;
char *j = &x ;
char y = 'f' ;
char *t = &y ;
printf("%p\n" , (void *)j);
printf("%p" , (void *)t);
}
Выход 0028FF17 0028FF16
Разница заключается в 1
.
Разница в первом случае - 4
. Если во втором случае это 1
. Почему это так?
И что я получу, если бы напечатал значение по всем адресам памяти по отдельности?
Возможно, это действительно общий и известный, но я только начал C, поэтому вывод программы смущает меня.
Update
Теперь, используя формат %p
и преобразуется значение указателя на void*
напечатать значение указателя, как предложено Keith Thompson.
@SergeyK .: Нет, я не думаю, что это дубликат. Никакой указатель не увеличивается. Код просто рассматривает адреса объявленных объектов. –
@ KeithThompson Тем не менее, базовый механизм тот же, и объяснение полностью применимо к этому делу. –
@ Серый К .: Я не согласен. Для 'указателя ++' отношение корректно определено. Между адресами двух отдельно определенных объектов нет определенной связи. Адреса 'char x;' и 'char y;' могут легко отличаться на 4, например, или на 42. –