C++程序分析:理解数组与指针的关系

需积分: 0 1 下载量 54 浏览量 更新于2024-08-19 收藏 8.66MB PPT 举报
"C++程序设计-谭浩强" 在C++编程中,程序的输出结果是关键要素。根据给出的程序代码,我们可以分析以下几个重要的知识点: 1. 数组与指针的关系: 在这段程序中,`alpha` 是一个字符数组,包含6个元素,每个元素都是一个指向字符串的指针。这种类型被称为二维字符数组,或者字符串数组。数组的声明如下: ```cpp char *alpha[6] = {"ABCD", "EFGH", "IJKL", "MNOP", "QRST", "UVWX"}; ``` 这意味着`alpha`数组中的每个元素都指向一个字符常量数组,即字符串。 2. 指针变量`p`的声明与赋值: `char **p;` 声明了一个二级指针`p`,它能存储指向字符指针的地址。在`main`函数中,`p`被赋值为`alpha`数组的首地址,即`p`现在指向`alpha[0]`。 3. 循环输出: ```cpp for(i=0; i<4; i++) cout << *(p[i]); ``` 这段代码遍历数组`alpha`的前四个元素(即`alpha[0]`到`alpha[3]`),并通过解引用`p[i]`打印出对应的字符串的第一个字符。由于`p`现在指向`alpha`,所以`*(p[i])`等价于`*(*(p+i))`,这表示获取`p`所指向的数组中的第`i`个元素的值,即`alpha[i]`指向的字符串的第一个字符。因此,输出为`AEIM`。 4. 指针的递增操作: 在C++中,指针加法操作如`p+i`会将指针移动到当前地址加上`i`个元素的大小。由于`p`是指向指针的指针,每次增加`i`实际上相当于向前移动了`i`个字符指针的大小,而不是字符的大小。 5. 字符串处理: 在C++中,字符串通常以空字符`\0`作为结束标志。当打印字符数组时,`cout`会一直输出直到遇到空字符。 6. C++的发展历史: 提供的资料介绍了C++的前身C语言的起源,从BCPL到B语言,再到由Dennis Ritchie和Brian Kernighan设计的C语言。C++是C语言的增强版,保留了C的很多特性,同时引入了面向对象编程的概念。 7. C语言的特点: - 结构化:支持结构化编程,便于设计复杂的程序。 - 高级与低级结合:提供丰富的运算符,包括位运算,兼顾高效与灵活性。 - 可移植性:编写的程序可以轻松移植到不同平台。 - 语法灵活:对于熟练的程序员,可以编写出高效的代码,但对初学者来说,调试可能更具挑战性。 8. C++相对于C语言的扩展: - 面向对象:C++引入类、对象、封装、继承和多态等概念。 - 异常处理:提供了异常处理机制,增强了程序的健壮性。 - 标准模板库(STL):包含容器、算法和迭代器等,使编程更高效便捷。 这段程序展示了C++中指针和数组的交互,以及如何使用指针遍历和打印字符串。同时,提供的背景信息加深了我们对C++及其前身C语言的理解。