指针是C/C++语言中一个重要的概念,同时也是C/C++语言的重要特色。正确而灵活地使用指针,可以有效地表示复杂的数据结构、动态分配内存、便捷地使用字符串、方便地使用数组(甚至超大数组)、直接处理内存、函数可以返回多个数值等。
在内存中,变量存储在特定的地址中,通过地址可以找到所需的变量。该变量在内存中的地址“指向”该变量单元。一个变量的地址称为该变量的“指针”。若一个变量被用来存储另一变量的地址,则它称为“指针变量”。
在学习过程中,读者要注意区分变量的指针和指针变量。变量的指针是指该变量在内存中的存储地址;而指针变量是指该变量的值是一个指向其他变量的指针值。在学习指针的过程中,读者首先要学习如下两个运算符:
&——取地址运算符;
∗——指针运算符。
下面举个简单的示例,以帮助读者理解什么是指针、什么是指针变量。
例1-6
下面继续指针的学习。
在C++语言中,指针和数组基本等价的原因在于指针算术和C++内部处理数组的方式。指针变量增加1或减去1之后,增加或减少的量等于指针指向的类型的字节数,例如,指向double型变量的指针加1之后,指针数值将增加8。
图1-4 例1-6的执行效果
而C++将数组名解释为数组第1个元素的地址,例如,数组wages[20]存储20个double型数据,即(www.xing528.com)
其实wages=&wages[0]。现在指针pw指向了wages[0],而∗(pw+1)将显示wa-ges[1]的数值,说明(pw+1)指向了数组的第2个元素。
指针既可以动态创建,也可以静态创建。静态创建指的是在声明时,即给定数组的长度。例如,
动态创建指针需要使用new操作符,即数组的长度可以是未知的,在程序运行时为数组分配内存空间。这类指针或数组名必须使用delete[]指令释放其占用的内存。例如,
指针和数组的关系还可以扩展到字符串。
提示1
动态分配内存会导致内存泄露。如果使用new(在自由存储空间或堆中)操作符创建变量之后,没有使用delete将其释放,会导致内存泄露。即使包含指针的内存由于作用域规则和对象生命周期的原因而被释放,在自由存储空间上动态分配的变量或结构将继续存在。但实际上将会无法访问自由存储空间中的结构,因为指向该内存的指针无效。这部分内存在程序的整个生命周期都不可使用,即这些内存被分配出去,而无法收回,造成内存浪费。一旦内存泄露严重,会导致程序的可用内存被耗尽,导致程序崩溃。
提示2
指针的目的是希望能直接映射机器上的地址机制,即实现可以对字节寻址,甚至可以从机器字中取出字节。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。