C语言 typedef 和 #define 的 sizeof 运算结果分析
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,因为a和b都是指针类型,存储的是内存地址,在 64 位系统中指针大小通常为 8 字节。 - #define 仅仅进行文本替换,
u8_在代码中被替换为int*。因此sizeof(c)和sizeof(d)的结果为 4,因为c和d实际上是int*类型,也就是指针类型,其大小取决于指针本身的大小,而不是它指向的内存块的大小。
结论:
typedef创建的是一种新的数据类型,会影响 sizeof 运算的结果。#define只是简单的文本替换,不会改变数据类型的本质,sizeof 运算的结果取决于实际的数据类型。
在使用 typedef 和 #define 定义类型时,需要注意它们在 sizeof 运算方面的区别,避免出现意想不到的结果。
原文地址: https://www.cveoy.top/t/topic/5Gm 著作权归作者所有。请勿转载和采集!