枚举类型介绍
typedef关键字
在 C 语言里,int[10] 的确不是一种常规的写法,不过它能清晰表达数组类型的本质。下面从几个方面详细解释这种类型以及为何不常见。
数组类型的本质
在 C 语言中,每个数组都有其独特的类型,该类型由元素类型和数组长度共同决定。例如,int arr[10]; 里的 arr 变量,其类型就是 “包含 10 个 int 类型元素的数组”,可以抽象表示成 int[10]。
为何不常见
在日常编写代码时,我们一般不会直接用 int[10] 这种形式。通常是直接声明数组变量,像 int arr[10]; 这样,而不是先提及类型再声明变量。不过在使用 typedef 关键字定义新类型名,或者在函数参数、返回值等场景里涉及数组类型时,这种抽象表示方式就会体现出它的作用。
typedef 目的是为数据类型取别名。在 typedef struct { int data1; int data2; } demo; 中,struct { int data1; int data2; } 是一个匿名结构体(没给结构体命名),用 typedef 给它定义别名 demo 。后续声明变量直接 demo d; 就行。此时有无结构体名(如 ttt ),都不影响通过别名声明变量,所以可以省略结构体名。
typedef与结构体的小应用
结构体变量和数组的区别
- 数组:它是相同类型元素的集合,这些元素在内存中连续存储。数组名在很多情形下会隐式转换为指向数组首元素的指针。例如,int arr[5] = {1, 2, 3, 4, 5}; 里,arr 代表的是一个包含 5 个 int 类型元素的数组,arr 本身能当作指向数组第一个元素 arr[0] 的指针使用。
- 结构体:它是由不同类型的数据成员组合而成的自定义数据类型。结构体变量是这个自定义类型的一个实例,它包含了结构体定义里的所有成员。
- *pPerson:这是为指向 struct {...} 类型的指针定义的别名。pPerson 实际上代表的是 struct {...} * 类型,也就是指向该结构体的指针类型。之后就能够使用 pPerson 来声明结构体指针变量,例如 pPerson ptr;,这等同于 struct {...} *ptr;。
这个Person和这个*pPerson在末尾的形式
要是都想表示指针的话,要懂得这样的写法
Person *str=&p1 一般这个见得多,也用的多
pPerson str=&p1 这两个就是一个意思