1第一步:
学生 *pstu;
这里学生是类型*是解地址
pstu是地址容器语法里 学生 学生1;就会开辟内存。
这里【学生1】和 【*pstu】等效那这里【pstu】是带类型的指针容器*pstu是解地址,还原出类型对象。这里【*】只是解地址的操作符【pstu】是包含2个信息的,类型和地址值通过【*】操作解地址,还原出 【学生1】这个实例对象
2第二步:
pstu = &学生1;
这里【&】是取地址操作符。
只能取已经开辟的内存的实例对象。【学生1】是包含2个信息的,类型和开辟内存的地址值。
但是【&】操作之后,类型就丢了,只有内存的地址值。【这个内存地址值是cpu的bit类型,比如32位,u32】这个内存的地址值是cpu的位数,一般是以字节为单位。需要注意的是,地址值自增1,只会偏移1个字节。只有类型对象的自增1,才会指向下一个对象。
也就是【pstu+1】,因为pstu是包含2个信息的,类型和内存地址值,//注意不能写成pstu++
只有包含2个信息的【pstu】自增1,才会在内存地址值的基础上,偏移1个类型大小的长度。
3数组:
byte a[5];
这里 byte 是数据类型。a[5]这个a实际是类型指针,它包含2个信息,类型和内存地址值 ,而且首地址是指向a[0]这个对象。a+1;这个操作后,会指向a[1]这个对象。不能写成a++ 只有新建 *b这个容器,【b=&a】这样才能b++操作,才能指向a[1]
这就跟2杯水不能交换,需要第3个空杯子,才能完成2杯水的交换。
4二级指针:
有这种情况,AB两个银行,A银行的保险柜存放的钥匙,才能打开B银行保险柜其中的一个保险柜。
有点像寻宝藏,找到一个线索,才能解开下一个谜题,获取到下一个线索。
这种取2次的叫二级指针,取3次以上的,叫多级指针。
*B*A
指针是从右向左
先取A银行的钥匙,再去打开B银行的保险箱,才能拿到钱。
二级指针有const的情况,就是一个保险箱是只读的,它不能被改变
*B* const A
还有一种是2个都是只读的
* const B * const A
举例了这么多,那3级指针也会写了吧。
* const C * const B * const A
顺序是从右到左。
5函数指针:
这个作用是你写了一堆函数,而我只需要写一个函数,就可以去调用你写的所有函数。
但也是有几个条件的。函数签名要一致,调用之前要先取被调用函数的内存地址值。
void (*point)() = &main;
调用的时候 point( ); 就可以了。