Как память выделяется переменным разных типов данных?

Я написал следующий код.

#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, поэтому вывод программы меня смущает.

Обновить
Сейчас использую%p отформатировать и преобразовать значение указателя вvoid* напечатать значение указателя, как предложено Китом Томпсоном.

Ответы на вопрос(3)

Ваш ответ на вопрос