C++程序设计:数组与指针的等价表示探讨

需积分: 0 1 下载量 95 浏览量 更新于2024-07-14 收藏 8.66MB PPT 举报
"这篇资料是关于C++程序设计的课件,主要讨论了不同方式定义字符数组的问题,以及C++语言的特点和历史。" 在C++编程中,字符数组的定义和初始化是至关重要的概念。题目中给出了四种不同的定义方式,并询问哪一种与初始定义的`char s[3][5]={"aaaa","bbbb","cccc"};`等价。让我们逐一分析: 1. `char **s1={"aaaa","bbbb","cccc"};` 这个定义创建了一个指向字符串指针的指针`s1`,而不是一个二维字符数组。每个字符串常量实际上是一个字符数组,由隐含的空字符`\0`终止。因此,`s1`是一个指针,指向三个字符串的地址,而不是一个二维数组的首地址。 2. `char *s2[3]={"aaaa","bbbb","cccc"};` 这个定义创建了一个包含三个元素的字符指针数组`s2`,每个元素都是一个字符串的地址。这与`s`相同,因为它们都存储了字符串的地址,只是`s2`是一个一维数组,而不是二维的。 3. `char s3[][3]={"aaaa","bbbb","cccc"};` 在这里,`s3`是一个未知宽度的二维字符数组,因为宽度在初始化时确定为每个子数组的长度(3)。然而,字符串"aaaa"、"bbbb"和"cccc"实际上都比3个字符长,所以这种定义会导致问题,因为数组无法正确容纳这些字符串。 4. `char s4[][4]={"aaaa","bbbb","cccc"};` `s4`也是一个未知宽度的二维数组,这次每个子数组的长度是4,可以正确容纳每个字符串,因此这个定义与原始的`s`定义等价。每个子数组足够大来存储每个字符串及其结束的空字符`\0`。 C++语言的发展历史可以从早期的BCPL和B语言开始追溯,直到Dennis Ritchie和Brian Kernighan设计出C语言,用于编写UNIX操作系统。随着时间的推移,C语言因其特性,如结构化编程、丰富的运算符、高效的执行和良好的可移植性,逐渐流行起来。C++是C语言的一个扩展,增加了面向对象的特性,如类、继承和多态性,使得程序设计更加灵活和强大。 C语言的主要特点包括: - 结构化编程:允许模块化和清晰的代码组织。 - 高级与汇编语言特性结合:丰富的运算符和位运算,支持直接底层操作。 - 可移植性:在不同计算机系统上移植相对简单。 - 灵活度:语法结构相对宽松,给予程序员更多自由,但也意味着调试可能更具挑战性。 对于初学者来说,理解和掌握C语言的语法规则是基础,而编写和调试程序需要更多的实践。虽然C语言的调试可能相对困难,但一旦掌握了其核心概念,就能编写出高效且通用的程序。