C/C++】如何不使用 sizeof 求数据类型占用的字节数

简介: C/C++】如何不使用 sizeof 求数据类型占用的字节数

实现方法:

在 C/C++ 中计算数据类型所占用的字节数除了使用 sizeof 之外,还可以采用宏定义语句的方式实现。


宏定义是 C/C++ 语言中的一种预处理指令,可以用来定义常量、函数以及代码片段等。在代码中合理使用宏定义可以提高代码的可读性、可维护性和可重用性,大大提高代码的灵活性。

#include <stdio.h>

#define GET_TYPE_SIZE(TYPE) ((char *)(&TYPE + 1) - (char *) & TYPE)

int main(void)
{
  char a = 'a';
  short b = 0;
  int c = 0;
  long d = 0;
  long long e = 0;
  float f = 0.0;
  double g = 0.0;
  long double h = 0.0;
  char* i = NULL;

  printf("char    %lld \r\n", GET_TYPE_SIZE(a));
  printf("short   %lld \r\n", GET_TYPE_SIZE(b));
  printf("int         %lld \r\n", GET_TYPE_SIZE(c));
  printf("long    %lld \r\n", GET_TYPE_SIZE(d));
  printf("long long %lld \r\n", GET_TYPE_SIZE(e));
  printf("float   %lld \r\n", GET_TYPE_SIZE(f));
  printf("double    %lld \r\n", GET_TYPE_SIZE(g));
  printf("long double %lld \r\n", GET_TYPE_SIZE(h));
  printf("char*   %lld \r\n", GET_TYPE_SIZE(i));

  return 0;
}


输出:

  • 运行环境:Visual Studio 2022 ×64
  • 运行结果:


实现原理:(char *)&TYPE 返回 TYPE 第一个字节的地址,(char *)(&TYPE + 1) 返回 TYPE 的下一个同数据类型的第一个字节的地址,它们之差即为该数据类型所占的字节数。


相关文章
|
2天前
|
存储 安全 C++
C++ 用户输入与数据类型详解:建立基本计算器及变量类型
了解C++的用户输入和数据类型。使用`cin`从键盘读取数据,如在简单计算器示例中获取两个数字并求和。C++的数据类型包括:`int`(整数)、`float`(浮点数,约6-7位小数)、`double`(更精确的浮点数,约15位小数)、`bool`(布尔值,true或false)、`char`(单个字符)和`string`(文本字符串)。每种类型都有特定的存储大小和用途。在处理浮点数时,`double`通常更安全。字符串需要包含`&lt;string&gt;`库。更多内容可关注微信公众号`Let us Coding`获取。
42 0
|
2天前
|
存储 安全 编译器
C++系列二:数据类型
C++系列二:数据类型
|
2天前
|
存储 C++
C/C++数据类型从0到内存具体分配详解
C/C++数据类型从0到内存具体分配详解
|
2天前
|
存储 编译器 C++
C++从入门到精通:1.1.2基础语法之数据类型
C++从入门到精通:1.1.2基础语法之数据类型
|
2天前
|
存储 安全 编译器
C/C++(2)基本语法和数据类型
C/C++(2)基本语法和数据类型
5 0
|
2天前
|
存储 程序员 C++
C++数据类型
C++数据类型
|
2天前
|
存储 安全 编译器
【C/C++ 基本数据类型】C++ 基本数据类型深度解析与C语言对比
【C/C++ 基本数据类型】C++ 基本数据类型深度解析与C语言对比
61 0
|
2天前
|
存储 编译器 程序员
C++基本数据类型
C++基本数据类型
|
2天前
|
存储 算法 C++
c++复合数据类型
c++复合数据类型
|
2天前
|
存储 C++
C++语言中数据类型-自定义类
C++语言中数据类型-自定义类
10 0