C语言 typedef 和 #define 对 sizeof 运算结果的影响

以下代码演示了 typedef 和 #define 两种方式定义指针类型时,sizeof 运算符得到的结果差异:

#include <stdio.h>

typedef int* u8;
#define u8_ int*

int main()
{
	u8 a,b;
	u8_ c,d;
	printf("sizeof a:%d\n",sizeof(a));
	printf("sizeof b:%d\n",sizeof(b));
	printf("sizeof c:%d\n",sizeof(c));
	printf("sizeof d:%d\n",sizeof(d));
	return 0;
	
}

运行结果:

sizeof a:8
sizeof b:4
sizeof c:4
sizeof d:4

分析:

  • typedef 创建了一个新的类型别名 u8,它代表 int* 类型。因此 sizeof(a)sizeof(b) 的结果为 8,因为 ab 都是指针类型,存储的是内存地址,在 64 位系统中指针大小通常为 8 字节。
  • #define 仅仅进行文本替换,u8_ 在代码中被替换为 int*。因此 sizeof(c)sizeof(d) 的结果为 4,因为 cd 实际上是 int* 类型,也就是指针类型,其大小取决于指针本身的大小,而不是它指向的内存块的大小。

结论:

  • typedef 创建的是一种新的数据类型,会影响 sizeof 运算的结果。
  • #define 只是简单的文本替换,不会改变数据类型的本质,sizeof 运算的结果取决于实际的数据类型。

在使用 typedef#define 定义类型时,需要注意它们在 sizeof 运算方面的区别,避免出现意想不到的结果。

C语言 typedef 和 #define 的 sizeof 运算结果分析

原文地址: https://www.cveoy.top/t/topic/5Gm 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录