2024年5月30日发(作者:)

摘 要:本文对C++各种类型的指针进行了深刻全面地讨论,把各种指针的常量,变量的声明、赋值

和访问都一一列出,对C++指针的应用进行了阐释。本文还揭示了指针变量与数组名的内在关系。

关键词:指针类型;指针常量;指针变量;数组名

Research of the Pointers’ Types in C++

Abstract:

All kinds of pointers in C++ are thoroughly and deeply constant quantity,variables,the for

m of endowing with value and access to data are listed like a table,

It's also a more comprehensive explanation of C++ pointers' author also bring to light th

e relationship between the pointer variables and the name of array.

Keywords:pointer type data; pointer constant quantity; pointer variable; array’s name

C++中的“指针”实质上是指针类型的数据, 可以是“变量”也可以是“常量”,它里面存储的数值常被

解释成为内存里的一个地址。人们往往只是简单的说“指针”,没有带“常量”或“变量”二字,那么,一个“指针”

到底是指常量呢还是指变量呢?这个问题要根据它所属的那个整句来进行判断。C++中的指针按照它所指

向的对象可以划分为变量指针、数组指针、函数指针、对象指针、类的成员数据指针和类的成员函数指针。

1. 变量指针

高级编程语言里都是通过变量来管理软件运行时内存中的变量数据,并不直接提供这个变量在虚拟

内存中居体的位置,这里我们可以使用一些手段,得到一个变量在虚拟内存中的位置,这个位置就是我们这里

所说的“变量指针”[1]

设type代表任意一种基本类型说明符,X是该类型的变量,则:

(1)X的指针常量为&X。

(2)一个type型指针变量P的声明格式为:type *P;

(3)使P指向X,也就是说用&X向P赋值的格式为:

①用&X初始化;

②在声明了P后向P赋值。

2. 数组指针

数组名本身就是一个指针,指向数组的首地址。注意这是声明定长数组时,其数组名指向的数组首

地址是常量。而声明数组并使某个指针指向其值指向某个数组的地址(不一定是首地址),指针取值可以

改变。

指向数组的一个指针,如int (*p)[10] 表示一个指向10个int元素的数组的一个指针。

设A是一个有3行4列个type型变量元素的一个二维数组,则:

(1)A有两个意义:①表示这12个type型变量构成的整体。②表示A<0>的地址,即A=&A<0>。

A<0>也有两个意义:①表示A的第一行的4个type型变量构成的整体(A中左下标为0的一行元素);

②表示A<0><0>的地址。

(2) ①声明一个指向type型的有3行4列个元素的二维数组的指针P的格式为: type(*P)

<3><4>;②声明一个指向type型的有4个元素的一维数组指针P1的格式为: type(*P1)<4>;③声明

一个指向type型变量的指针P2的格式为:type *P2。

(3)①使P指向A的方式为:用&A初始化P或在声明了P后向 P赋值;②使P1指向A<1>的方

式为:用“A+1”初始化P1或在声明了P1后向P1赋值;③使P2指向A<2><1>的方式为:用&A<2><1>

初始化P2或在声明了P2后向P2赋值。

(4)用 A和*来表示A<2><1>的表达式为*(*(A+2)+1),表示A<0><0>的表达式为**A。

(5)按3,①用P和*来表示A<2><1>的表达式为*(*(*P+2)+1);②用P1和*来表示A<2><1> 的

表达式为*(*(P1+1)+1);③用P2和*来表示A<0><0>的表达式为:*(P-6);

用P、P1和P2来访问A的元素有很多优越性,如它们及其表达式可以进行++运算和- -运算而指针

常量却办不到。

3. 函数指针

函数指针是指向函数的指针变量。因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函

数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。高级语言在编译时,每一

个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该

指针变量调用函数,就如同用指针变量可引用其他类型变量一样。

设一个函数的原型为:type fun (),则:

(1)fun()的指针常量为fun

(2)声明一个数据类型为type,形参表为FL的函数指针P的格式为:type (P)(FL);

(3)用一个数据类型为type形参表为FL的函数指针只能指向数据类型为type形参表为FL的函数。

按(1)和(2),用P指向fun()的方式为:用fun初始化P或在声明P后向P赋值。

(4)用P而不用fun来调用fun()的格式为:P(和FL对应的实参表);

4. 对象指针

对象指针指向类的成员的指针。在C++中,可以说明指向类的数据成员和成员函数的指针。

指向数据成员的指针格式如下:

<类型说明符><类名>::*<指针名>

指向成员函数的指针格式如下:

<类型说明符>(<类名>::*<指针名>)(<参数表>)[1]

设t是A类的一个对象,a和f( )分别是A的一个公有变量成员和公有函数成员,则:

(1)t的指针常量为&t;

(2)声明一个指向A类的对象的指针P的格式为:A*P;

(3)使P指向t的方式为:用&t初始化P或者在声明了P后再向P赋值。