[英]how this code works to calculate sizeof of datatype?
#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();
}
//有人可以幫助我理解wt宏計算sizeof 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;
}
該表達式計算標稱位於空指針地址的兩元素數組中元素的地址。 然后將兩個地址都強制轉換為char *並相減,從而得出兩個地址之間的差(以字節為單位)。
分解:
#define My_Sizeof(type) ((char*)((type*)0 +1) - (char*)(type*)0)
(char*)(type*)0
為零
(type*)0 +1
使用類型(type *)
指針執行指針算術,因此(type *)0 + 1
將是偏移量恰好為0 + 1 * sizeof(type) = sizeof(type)
個字節的指針
當差取為(type *)
,差為1
。 當兩種類型(char *)
的差值sizeof(T) - 0 = sizeof(T)
,差值為sizeof(T) - 0 = sizeof(T)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.