在学习数据结构与算法的过程中,C语言是基础,它提供了对底层内存操作的强大支持。本节主要复习了C语言中的指针、数组、内存管理以及类型定义等核心概念。
1. **指针**:指针是C语言中的一个重要特性,它是一个变量,用于存储内存地址。每个指针变量都有一个特定的数据类型,例如`int *`表示指向整型变量的指针。在声明指针时,必须为其指定类型,如`int *p`。指针的大小通常是2个字节,但这取决于具体的架构。指针可以用来访问数组元素,例如`p=a`将数组a的首地址赋给指针p,通过`p++`可以访问数组的下一个元素。在结构体中,指针同样可以用来访问结构体成员,如`p->data`。
2. **结构体**:`struct List`定义了一个包含`data`、`length`和`size`三个整型成员的结构体。通过`&L`获取结构体L的地址,并用指针`p`来访问其成员。指针可以用来遍历结构体的各个字段,如`p->data`、`p->length`和`p->size`。
3. **指针与数组**:数组名实际上是一个常量指针,指向数组的第一个元素。数组和指针在操作上有许多相似之处,可以使用`p[A]`或`*(p+A)`来访问数组元素。指针可以通过`++`、`--`或加上偏移量来移动,以访问不同位置的元素。
4. **sizeof运算符**:`sizeof`运算符用于计算类型或变量所占用的内存字节数。例如,`sizeof(int)`通常返回2(假设这里是16位环境),`sizeof(char)`为1,`sizeof(double)`为8,`sizeof(float)`为4。对于包含多个成员的结构体,`sizeof(struct datlem)`会返回所有成员大小之和,加上可能的字节对齐。
5. **动态内存分配**:C语言提供了`malloc`函数来动态申请内存空间。`malloc(字节数)`返回一个无类型的指针,通常需要类型转换。例如,`p = (int *)malloc(20)`申请了20个字节的空间,并将其转换为`int`指针。动态分配的内存应使用`free`函数释放,以避免内存泄漏。当不再需要动态分配的内存时,应立即调用`free`,如`free(pd)`。
6. **typedef重定义类型名**:`typedef`关键字允许我们创建新的类型别名。例如,`typedef int ElemType`定义了一个新的类型名`ElemType`,等同于`int`。使用`typedef`可以使代码更具可读性,特别是处理复杂类型如结构体指针时。如`typedef struct datlem ElemType`,然后可以用`ElemType`代替`struct datlem`。
在实际编程中,理解和熟练掌握这些基本概念至关重要,它们构成了C语言的基础,并在数据结构和算法实现中扮演着关键角色。理解指针操作、内存管理和类型定义能够帮助我们编写更高效、更安全的代码。