C语言复习:指针与数组详解

需积分: 15 9 下载量 140 浏览量 更新于2024-07-13 收藏 299KB PPT 举报
"这篇资料主要涵盖了C语言中的关键概念,特别是关于指向数组元素的指针的使用、宏定义、typedef的运用以及动态存储管理。" 在C语言中,指针是一个重要的概念,它能存储变量的内存地址。当我们谈论指向数组元素的指针时,我们首先要了解数组的本质。数组是一种在内存中连续存储相同类型数据的结构。例如,`int a[10]`声明了一个包含10个整数的数组。在这里,`a`实际上是一个指向数组首元素的指针,即`a[0]`的地址。 我们可以定义一个新的指针变量`int *pa`来指向数组的元素。通过赋值`pa = &a[0]`或`pa = a`,`pa`现在就指向了数组的第一个元素。之后,我们可以通过`*pa`访问`a[0]`,`*(pa+1)`访问`a[1]`,以此类推。有趣的是,`*(pa+i)`、`a[i]`、`*(a+i)`和`pa[i]`都是等效的,用于访问数组的第`i`个元素。然而,由于数组名`a`实际上是常量,我们不能对它进行自增操作,如`a++`,这会导致编译错误。 宏定义是C语言预处理的一部分,它允许我们将一个标识符替换为一个字符串。不带参数的宏定义如`#define OK1`,简单地将`OK1`替换为字符串。而带参数的宏定义如`#define S(a, b) a * b`则会根据传入的参数进行计算,如`S(3, 2)`将被替换为`3 * 2`。 `typedef`关键字用于创建新的类型别名,简化代码的可读性。例如,`typedef int ElemType`定义了一个名为`ElemType`的新类型,可以用来替代`int`。`typedef int ARR[10]`则创建了一个表示10个整数数组的类型。这样,`ARR a, b, c, d;`就等同于`inta[10], b[10], c[10], d[10];` 在内存管理方面,C语言提供了动态内存分配的函数。`malloc()`用于在运行时动态地分配指定大小的内存块,返回的是指向该内存块的指针。例如,`int *p; p = (int *)malloc(20);`分配了20个字节(假设`int`占4字节),`p`指向这些字节的起始位置。`free()`函数用于释放之前由`malloc()`分配的内存,防止内存泄漏。`realloc()`函数允许在已分配的内存块上进行扩展或收缩,如果无法扩展,它会尝试创建一个新块并复制原数据。 总结起来,这篇复习资料强调了C语言中指针与数组的关系,宏定义和typedef的使用,以及动态内存管理的重要性。这些概念对于理解和编写有效的C语言程序至关重要。