4.7 小结

    指针和引用是C++语言的难点,本章主要介绍了指针的概念、指针变量、指针运算、动态内存分配和引用等内容。

    指针变量中存储的是某个内存单元的地址信息,通常用“类型符*”的形式来声明一个指向某种类型的指针变量。指针变量支持的运算不多,特别要注意指针和整数的加减。不同类型的指针,对其进行加1或减1时,改变的幅度不同,根据这个性质可以声明指向数组的指针,通过加减指针方便数组元素的管理。

    数组名很特殊,编译器将一维数组的数组名解释为指向第一个元素的指针,对多维数组来说,数组名指向的是某对应的广义向量,利用数组名访问数组元素是个经常会出错的环节,理解数组在内存中的存储模型是同类型还是连续将有助于正确使用数组名。

    C++中还可以声明元素为指针的数组,称为指针数组。数组中的每个元素都存储着某个内存单元的地址信息,在组织字符串时,指针数组尤其有效。

    在C++中还可以根据需要用操作符new和delete,以及标准库函数malloc()和free()动态申请和释放内存,同时提高了编程的灵活性。动态申请和释放内存是把“双刃剑”,经常是程序bug的源泉,如未对指针进行初始化或分配内存,就进行各种运算,以及内存的重复释放和未释放动态申请内存导致内存泄露等。

    引用是变量的别名,可以看成是另一种形式的指针,它与指针不同的是,引用不占据内存地址空间,引用和目标变量指的是同一内存实体,对引用的取址操作实际上就是对目标变量的取址操作。一般来说,引用比指针要直观,在编程时应尽量使用引用,以提高程序的可读性。