typedef的使用

2023-12-15 12:29:03

? ? ? ?在C语言中,有一个关键字叫做typedef,有些人对此感到很疑惑。不熟悉此知识的同学都会对编程失去细心,直接劝退(因为之前我就是这样)。、

? ? ? ?因为好不容易认识了C语言中所有的关键字(就是类型吧,像啥int,char,long,int arr[],char*等等等),但是有时候却出现了Student a,TreeTypeData node之类的语句,这些语句一看就令人头皮发麻。

Student a;
TreeTypeData node;

? ? ? ?还有那些我们复制粘贴的代码,但是一运行就报99个错误就崩溃了。

? ? ? ?明明有主函数,但是确实TreeTypeData这种类型也确实没见过,于是大家看见报错,就感觉好难,为什么?算了,就这样吧,不学了。

? ? ? ?好吧,不得不说,这种总是给出部分代码的文章,确实很容易让新手退坑,其实在C语言中,也确实没有这种类型,但是此时我们的主角就登场了,他们都是通过使用typedef来重命名的。

? ? ? ?typedef关键字,其实是重命名关键字,相当于我们给类型起了一个别名,比如:

typedef int A;
//此时我们将int类型起了别名 A

int main()
{
	//定义一个int变量a
	int a = 0;

	//使用 int 别名定义一个变量 b
	A b = 0;
	return 0;
}

? ? ? ? 就好像此时有一个人叫int,我们给他起了一别名叫 A 。

? ? ? ?所以此时你喊他int他会答应,喊他A他也会答应。所以以上代码相当于定义了两个整形,一个整形变量a,一个整形变量b。我们可以观察a、b的大小来验证,他们都是同一种类型,是整形,所以占4字节空间。我们改变它并打印:

typedef int A;
//此时我们将int类型起了别名 A

int main()
{
	//定义一个int变量a
	int a = 0;

	//使用 int 别名定义一个变量 b
	A b = 0;

	a = 1;
	b = 3;
	printf("a = %d, b = %d\n", a, b);
	printf("a的大小为:%d\n", sizeof(a));
	printf("b的大小为:%d\n", sizeof(b));

	return 0;
}

? ? ? ?起别名目的并不是为了提高程序运行效率,而是为了编码方便,提高代码的可读性,令人见名思意。

? ? ? ?之后就是typedef对结构体的使用了,这也是令人头疼的地方。我们知道结构体是由成员列表的(详情请看:结构体和位段-CSDN博客)。

? ? ? ?其实变量列表我们一般不会使用,大部分还是给结构体起别名。

typedef struct N
{
	int a;
}Node;

? ? ? ? 此时我们给结构体struct N 起了Node的别名。

typedef struct N
{
	int a;
}Node;

int main()
{
	
	Node num1 = { 2 };
	//利用别名定义一个结构体变量
	struct N num2 = { 3 };

	printf("%d\n", num1.a);
	printf("%d\n", num2.a);
	return 0;
}

? ? ? ?所以下次看到没有见过的关键字,大家就知道其实在此之前就已经重命名了。?

文章来源:https://blog.csdn.net/weixin_64132124/article/details/135011927
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。