一个有关C语言学习中地址的问题

今天老师出了一个题目。

  1. 定义字符型变量x、整形变量y,双精度型变量z,输出这三个变量的地址。

我的代码如下 

#include<stdio.h>

int main()
{
	char x;
	int y;
	double z;
	printf("%d\n%d\n%d\n",&x,&y,&z);
   return 0;
}

 输出如下

想请问一下,为什么char和int之间的差值不是char类型的字节数1?int和double之间的地址差值不是int类型的字节数4?

没人说他们仨咋内存中必须是挨着的啊。