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