指针详解【C语言】

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( );  就可以了。

你可能感兴趣的:(单片机,c语言,开发语言)