C++字符数组定义的等价表示

需积分: 10 13 下载量 10 浏览量 更新于2024-08-18 收藏 8.66MB PPT 举报
在谭浩强的经典C++课件中,章节讨论了一种特定的字符数组定义,并探讨了其与其他几种等价表示法。首先,原始的定义是: ```c++ char s[3][5] = {"aaaa", "bbbb", "cccc"}; ``` 这个定义创建了一个3行5个字符的二维字符数组,每个子数组存储一个字符串。 接下来,课件提到两种不同的等价表示: 1. `char **s1 = {"aaaa", "bbbb", "cccc"};` 这是一个指向字符指针的指针数组。这里,`s1`实际上是一个包含三个字符串常量地址的数组,每个元素都是指向字符串常量的指针。 2. `char *s2[3] = {"aaaa", "bbbb", "cccc"};` 这也是一个二维字符数组,但是元素类型是字符指针,而非字符串。这与原始定义在内存布局上有所不同,虽然实质上存储了相同的信息。 另一种形式: ```c++ char s3[ ][3] = {"aaaa", "bbbb", "cccc"}; ``` 这个声明方式看似错误,因为`[]`的数量不匹配。通常,应该用`[3][5]`明确指定数组的维度,如原始定义那样,或者使用`*`表示动态分配,但这里没有足够的信息判断其是否意图表示动态分配。 最后,`char s4[ ][4] = {"aaaa", "bbbb", "cccc"};` 这个定义同样存在问题,可能是试图创建一个2D数组,但列数指定为4,这会导致数组中的最后一个字符串"cccc"超出边界。 C++语言的发展背景中提到了C语言的起源和发展,以及C++与C的关系。C语言以其结构化、灵活性、高效的语法和良好的可移植性被广泛采用。然而,C语言的语法结构相对宽松,可能对初学者来说有一定的挑战,需要熟悉语法规则才能编写和调试程序。 总结来说,本部分内容主要关注C++中的数组定义及其潜在的等价表示,强调了在理解C++数组和指针概念时的关键区别,同时提及了C++语言的历史和特点,以及C语言对C++的影响。