簡體   English   中英

該代碼如何計算數據類型的sizeof?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM