为什么地址类型被转换为char*?

Ami*_*mar 2 c

我正在阅读其中一个实现,找出变量的大小而不使用sizeof()以下是实现

int i = 1;
size_t size = (char*)(&i+1)-(char*)(&i);
printf("%zi\n", size);
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么varibale i的地址类型被转换为(char*)而不是(int*).

任何一个可以帮助我理解这种类型的种姓是如何工作的吗?

Bat*_*eba 8

该类型转换(char*)意味着差额,计算char 指针运算.所得size然后将在单位char(即字节),这是一个自然单元sizeof.