C++编程:郑莉清华大学教程-第6章 数组、指针与字符串解析

需积分: 20 4 下载量 180 浏览量 更新于2024-08-19 收藏 5.15MB PPT 举报
"C++语言程序设计第4版,由郑莉教授讲解,涵盖了数组、指针、动态内存分配、vector使用、深拷贝与浅拷贝以及字符串等核心概念。" 在C++编程中,数组是一种重要的数据结构,它允许我们存储一组具有相同类型的数据。数组是具有特定顺序的元素集合,这些元素可以是基本类型,如整型(int)、浮点型(float)或字符型(char)等。数组属于构造类型,因为它是由其他基本类型构建的。 数组的声明通常包括类型说明符、数组名和常量表达式作为数组的大小。例如,`inta[10];`声明了一个包含10个整数的数组。一旦声明,我们可以访问数组的每个元素,如`a[0]`到`a[9]`。在C++中,数组下标从0开始,所以`a[10]`实际上是不存在的。 在使用数组时,我们必须先声明数组,然后才能使用其元素。每个元素可以单独赋值或访问,但不能直接引用整个数组。例如,`a[0]=a[5]+a[7]-a[2*3]`是对数组元素的操作。 初始化数组时,可以指定初始值。对于一维数组,可以这样初始化:`inta[5]={1,2,3,4,5};`。而在二维数组中,如`inta[5][3]`,可以按行进行初始化。 数组在内存中的存储是连续的,这意味着所有元素在内存中占据连续的位置。例如,如果`a[0]`的地址是100,那么`a[1]`的地址通常是104(假设每个整数占用4个字节)。这种连续存储使得通过指针遍历数组变得简单和高效。 指针是C++中的另一个关键概念,它存储了变量的内存地址。对于数组,指针可以用来遍历或修改数组元素。例如,`int*p=a;`将指针`p`指向数组`a`的第一个元素。通过递增指针,可以访问下一个元素,如`p++;`。 动态内存分配允许在程序运行时根据需要分配和释放内存。`new`运算符用于动态分配内存,`delete`用于释放。例如,`int*p=newint[10];`会分配10个整数的空间,并返回指向第一个元素的指针。 在C++中,`vector`是一个容器类,它像数组一样可以容纳一组元素,但它的大小可以在运行时动态调整。`vector<int>v(10);`创建了一个包含10个整数的向量`v`。`vector`提供了许多便利的方法,如`push_back`来添加元素,`resize`来改变大小。 深拷贝和浅拷贝涉及到对象复制时内存的管理。浅拷贝只是复制了对象的引用,而深拷贝会复制对象的全部内容,包括底层的数据结构。不正确的拷贝可能会导致意外的数据共享和内存泄漏问题。 字符串在C++中可以视为字符数组,但标准库提供了`std::string`类来处理字符串,提供更安全和方便的接口。例如,`std::stringstr="Hello";`定义了一个字符串`str`。 本章的小结部分可能回顾了上述概念,并提供了练习题以加深理解。通过学习这些内容,程序员能够有效地利用数组、指针和字符串进行程序设计,同时理解动态内存管理和对象复制的细微之处。