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

需积分: 9 1 下载量 86 浏览量 更新于2024-08-24 收藏 5.67MB PPT 举报
"该资源主要讨论了C语言中的指针数组和指向指针的指针的概念,摘自谭浩强的C语言第三版教程。同时,简介了C语言的历史发展和标准化过程,强调了理解不同C编译系统特性的必要性。" 在C语言中,指针数组和指向指针的指针是两种重要的数据结构,它们允许我们更加灵活地管理和操作内存。指针数组是一种特殊的数组,它的每个元素都是一个指针类型,这意味着数组的每个位置存储的是一个变量的地址,而不是实际的值。例如,`int *p[4]`定义了一个包含四个元素的指针数组,每个元素都能存储一个整型变量的地址。这样的定义方式使得我们可以将数组的各个元素看作指向不同整型变量的指针。 指针数组的使用通常涉及到动态内存分配和多维数组的处理。例如,可以创建一个指针数组来存储多个字符串,每个字符串在内存中可能是不连续的。通过这种方式,我们可以方便地管理一组相关的数据,而无需在内存中为它们分配连续的空间。 另一方面,指向指针的指针是一个指针变量,它存储的是另一个指针变量的地址。这种类型的数据结构在函数参数传递和复杂数据结构的实现中非常有用。例如,`int **pp`是一个指向指针的指针,可以用来间接访问存储在另一个指针变量中的值。这样,我们可以通过一层或更多的指针间接访问内存中的数据,这在处理动态分配的二维数组或链表时尤其常见。 C语言起源于20世纪70年代,由Dennis Ritchie在B语言基础上开发,最初用于编写UNIX操作系统。随着UNIX系统的普及,C语言逐渐受到重视,并在1978年发布了具有里程碑意义的《The C Programming Language》(通常称为K&R)。1983年,美国国家标准化协会(ANSI)制定了ANSI C标准,随后被国际标准化组织(ISO)采纳,形成了ISO C标准。这个标准为C语言的跨平台移植和一致性提供了基础。 然而,不同的C编译器可能会有一些特定的扩展或实现差异,因此程序员在实际开发中需要了解所使用的编译器特性。谭浩强的教程以ANSI C为基础,旨在帮助读者掌握通用的C语言知识,同时也提醒读者关注特定编译器的差异,以便更好地适应不同的编程环境。