分析以下代码的运行结果:

#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

分析:

  1. typedef int* u8; 这行代码定义了一个类型别名 u8,它表示指向 int 类型的指针。
  2. #define u8_ int* 这行代码定义了一个宏 u8_,将 u8_ 替换为 int*
  3. u8 a, b; 这行代码定义了两个 u8 类型的变量 ab,实际上是定义了两个 int 类型的指针变量。
  4. u8_ c, d; 这行代码定义了两个 int* 类型的变量 cd,实际上也是定义了两个 int 类型的指针变量。
  5. sizeof(a)sizeof(b) 分别返回指针变量 ab 的字节大小,由于指针变量的大小与系统架构有关,一般为 4 字节或 8 字节。
  6. sizeof(c)sizeof(d) 分别返回 int* 类型的变量 cd 的字节大小,由于 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) 相同。
C语言中 typedef 和 #define 的区别:代码示例分析

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

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