这段代码如何计算数据类型的sizeof? #包括 #包括 #包括 #包括 #定义我的大小(类型)((字符*)((类型*)0+1)-(字符*)(类型*)0) void main() { 字符a='1'; int b=我的尺寸(int); printf(“尺寸为%d”,b); _getch(); }

这段代码如何计算数据类型的sizeof? #包括 #包括 #包括 #包括 #定义我的大小(类型)((字符*)((类型*)0+1)-(字符*)(类型*)0) void main() { 字符a='1'; int b=我的尺寸(int); printf(“尺寸为%d”,b); _getch(); },c,C,//有谁能帮助我理解宏在计算char数据类型的大小时所做的工作吗?将其分解为一小部分,以下伪函数可以获得相同的结果: #include <stdafx.h> #include <stdio.h> #include <conio.h> #include<stdlib.h> #define My_Sizeof(type) ((char*)((type*)0 +1) - (char*)(type*)0) void main() { char a=

//有谁能帮助我理解宏在计算char数据类型的大小时所做的工作吗?

将其分解为一小部分,以下伪函数可以获得相同的结果:

#include <stdafx.h>
#include <stdio.h>
#include <conio.h>
#include<stdlib.h>
#define My_Sizeof(type) ((char*)((type*)0 +1) - (char*)(type*)0)
void main()
{
    char a='1';
    int b=My_Sizeof(int);
    printf("size is %d",b);
    _getch();
}
该表达式计算名义上位于空指针地址的两元素数组中元素的地址。然后,它将两个地址强制转换为char*并进行减法运算,从而产生两个地址之间的差异(以字节为单位)。

将其分解为:

size_t My_Sizeof(type) {
    type* elem0 = (type*)0;
    type* elem1 = (type*)0 + 1;
    char* elem0_addr = (char*)elem0;
    char* elem1_addr = (char*)elem1;
    return elem1_addr - elem0_addr;
}
(字符*)(类型*)0
为零

(type*)0+1
使用
(type*)
类型的指针进行指针运算,因此
(type*)0+1
将是偏移量正好
0+1*sizeof(type)=sizeof(type)
字节的指针

当差异被视为
(type*)
时,差异为
1
。当这两种类型的差异均为
(char*)
,则差异为
sizeof(T)-0=sizeof(T)

#define My_Sizeof(type) ((char*)((type*)0 +1) - (char*)(type*)0)