C语言中 typedef 和 #define 的区别:代码示例分析
分析以下代码的运行结果:
#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:4
sizeof b:8
sizeof c:4
sizeof d:8
分析:
typedef int* u8;这行代码定义了一个类型别名u8,它表示指向int类型的指针。#define u8_ int*这行代码定义了一个宏u8_,将u8_替换为int*。u8 a, b;这行代码定义了两个u8类型的变量a和b,实际上是定义了两个int类型的指针变量。u8_ c, d;这行代码定义了两个int*类型的变量c和d,实际上也是定义了两个int类型的指针变量。sizeof(a)和sizeof(b)分别返回指针变量a和b的字节大小,由于指针变量的大小与系统架构有关,一般为 4 字节或 8 字节。sizeof(c)和sizeof(d)分别返回int*类型的变量c和d的字节大小,由于int*类型是指针类型,其大小与指针变量相同,一般为 4 字节或 8 字节。
因此,输出结果为:
sizeof a:4
sizeof b:8
sizeof c:4
sizeof d:8
总结:
typedef定义的是类型别名,它在编译阶段进行替换,而#define定义的是宏,它在预处理阶段进行替换。typedef创建了一种新的类型,而#define只是简单的文本替换。- 在本例中,
u8是一个新的类型,而u8_只是一个宏,所以sizeof(a)和sizeof(b)的结果与sizeof(c)和sizeof(d)相同。
原文地址: https://www.cveoy.top/t/topic/5F8 著作权归作者所有。请勿转载和采集!