指针是C++中最重要的知识点之一。学习过C语言的同学应该对指针有所了解。即使没有学习过C语言也没关系,因为完全可以从学习C++开始啊,哈哈,因为咱们要学习的就是c++啊。
什么是指针,简单来说,指针是指向一块内存地址的变量,该变量内存放的值是一个内存地址。
比如:
int a = 1;
int* p_a = &a;
那么p_a就是指向a所在地址的指针,假设a在内存中开始的地址为0x00170010,那么p_a的值就是0x00170010,其中“零x”代表的是16进制数。a的值是1。也就是说以0x00170010为起始的4个字节的内存空间中存放着的值是1,也就是a的值。(int 型变量是4个字节)。“&”是在这里是取地址符,就是取到a所在的地址。指针所指向的变量类型必须和声明类型一致,如上面的等号两边都是int型。
举个栗子:火车有10个车厢,编号为1-10,变量a代表某个车厢的可容纳人数,p_a就代表第几个车厢。假设a = 100。代表有个车厢装载了100个人,那这个车厢是第几个车厢?通过&我们就可以知道a在(假设)第3个车厢,那么就可以将3赋值给p_a, 也就是p_a = &a。由此,我们便知道了第三个车厢载人100,也就是说,p_a指向的地址空间中存放的值是100。
以上是指针中最基础的内容,而实际中,如果用不好指针,c++程序员会深受困扰,但如果用得好,就是非常美丽的事情了。c++多态也正是因为有指针才能实现。
比如:
Class Base;
Class A : public Base;
则Base* pBase = new Base;也可以Base* pBase = new A;这就是多态的基础,即基类指针可以指向子类。
声明一个指针的方式如:
int * p;
double* p;
或者假设你定义了一个类A
A* p;则声明了一个可以指向类A的指针p.
如何给指针赋值?
A a;
A* p;
p = &a;
那么p的值就是a的地址。或者:
p = new A;
则p的值也是A的地址。
只是上述两种方式实例化对象的方式不同,所分配的内存地址也不同。在运行的程序中,通过new分配的地址在堆空间中,另外一种则是在栈空间中。在堆空间中分配的内存不能自动释放,只能通过delete或delete[]来释放。
我相信p的使用大家应该都会了,前面也都提到过,后续也会慢慢的再跟大家通过各种形式聊起,今天主要先说说概念。
指针的内容很多,今天先到这里,(时间太少啊),大家有什么问题可以留言,顺便点点关注, 以后多多交流,一起提高。