C语言:指针数组与指针的指针解析

需积分: 33 1 下载量 73 浏览量 更新于2024-07-14 收藏 482KB PPT 举报
"这篇文档主要讨论了C语言中的数组类型,特别是指针数组和指针的指针的概念,以及它们在函数参数传递中的应用。它还涵盖了指针的基础知识,包括指针的定义、赋值,以及数组和指针之间的关系。通过两个示例程序,解释了如何使用指针数组来输出字符串,并展示了如何通过指向指针的指针变量实现字符串的反序输出。" 在C语言中,数组和指针有着密切的关系。数组名在很多情况下可以被视为指向数组首元素的指针常量。当数组作为函数参数时,传入的是数组的地址,即首元素的指针。例如,函数`sort`的形参`char *name[]`可以理解为`char **name`,表示一个指向字符指针的指针,因为数组名`name`在这里相当于`&name[0]`。 指针类型用于存储变量的地址,声明一个指针变量通常使用`类型标识符*变量名`的形式。指针可以被赋值为另一个变量的地址或者同类型的指针变量。对于数组,可以使用`sizeof`运算符获取数组的大小,例如`sizeof(a)`返回整个数组的字节数,而`sizeof(a+1)`返回下一个数组的地址与当前数组的地址之差,通常等于数组元素的大小。 指针数组是一种特殊的数组,它的每个元素都是一个指针。例如,`int*a[3]`声明了一个包含3个整数指针的数组。初始化指针数组时,可以使用`NULL`表示未分配的元素。在例子中,`int*p[3], *pa, a=12, b=20;`定义了一个指针数组`p`,一个指针变量`pa`,以及两个整数`a`和`b`。通过`pa=&a; p[0]=pa;`这样的操作,我们可以将`pa`的值赋给`p[0]`,这样`p[0]`就指向了`a`的地址。 指针的指针,也就是二级指针,是一个指向指针变量的指针。这种类型在处理动态内存分配、多维数组或者需要传递指针本身作为参数的场景中非常有用。例如,`char**name`可以用来表示一个指针数组,每个元素都是一个字符指针。在例14.6中,通过指向指针的指针变量`name`,程序能够反向输出字符串数组,展示了指针的指针在实际编程中的应用。 总结来说,这个文档深入浅出地介绍了C语言中的数组类型,特别是指针数组和指针的指针的概念,以及它们在实际编程中的使用技巧。理解这些概念对于编写涉及动态数据结构、内存管理和复杂数据交换的C语言程序至关重要。