设p是指向整型变量的指针变量,a是整型变量。如果要把a的地址赋予p有下述两种方式:
(1)指针变量初始化。
(2)赋值法。
请注意:
不能把数值赋给指针变量,“int∗p;p=100;”的赋值是错误的。
2.指针变量的运算
指针变量的值是内存地址,常用到两种运算:加和减。这两个运算通常是配合数组进行操作的。
例9-3 利用数组输入4个自然数,使用指针变量输出。
程序代码如下:
输入:
2019
输出:
2019
请注意:上面程序中的“p++”,不是p的值(地址)加1。由于a是int类型,所以是“跳过”一个整数的空间,到达下一个整数。
不难理解,对于int类型指针变量,
(1)“p--”是向前“跳过”一个整数的空间,到达前一个整数。
(2)“(p+2)”是指向后面第2个整数的地址。
3.无类型指针
当需要指针根据不同的情况指向不同类型的数据时,可以暂时定义一个无类型的指针,以后根据具体需要再用强制类型转换的方法明确它的类型。
定义无类型指针p的方法如下:
功能:说明p是一个void类型的指针,void表示指针指向的数据类型不确定。
例9-4 无类型指针示例。
程序代码如下:(www.xing528.com)
定义了无类型指针p,可以为它赋地址值。但是输出时必须明确p指向的空间所存放的数据类型。因为不同的类型数据占用的内存空间大小不同,存储的格式也不同。
C++中的sizeof(x)可以计算变量x所占的内存字节数。下面来试一试!
例9-5 测试不同类型变量占用的内存空间容量。
程序代码如下:
运行结果:
从测试的运行结果得知:一个字符型变量占内存空间为1B,一个整型变量占4B,一个短整型变量占2B,一个长整型变量占4B,一个双长整型变量占8B,一个双精度浮点型变量占8B,一个整型数组元素占4B。
如果将语句“int n[1];”改成“int n[100];”,运行结果是多少B?你能验证吗?
4.指向指针的指针
一个指针变量指向另一个指针类型数据,称为二重指针变量。二重指针变量p的定义方法如下:
已知“int∗p;”表示p是一个指向整型数据的指针变量。∗∗p相当于∗(∗p),前面增加了一个∗号,表示p是一个指向整型指针变量的指针,即二重指针。如图9-3所示为彼此的关系。
图9-3 关系示意
注意,虽然p1和p2都是指针变量,其值都是地址,但是下面的赋值语句是错误的:
因为p2只能指向另一个指针变量p1,而不能指向一个整型变量t,即一重指针与二重指针不可相互赋值。
引用一重指针变量的值,要用一个“∗”;引用二重指针变量的值,要用两个“∗”。前面的例子中,要引用t的值,可以用∗p2,也可以使用∗∗p1。
类似地,可以定义多重指针。如:int∗∗∗p,int∗∗∗∗p等。
例9-6 二重指针应用示例。
运行结果:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。