c/c++指针一幅图让你领悟

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_41913666/article/details/79816301

c++ *号和&都是取地址符号,&类似get;*类似set方法,但*号还有更重要的意义,首先*是计算机允许开辟最大类型Bit数(这个内存中用于存放地址,如果内存容不下地址Bit数,就相当于double转float,地址出问题程序就是崩)。*代表计算机的最小单位BIt,我们使用时加上*声明的类或变量统称“xxx”指针;“xxx”也就代表需要开辟多少Bit数内存。比如char类型1个字节就是8Bit(0000 0000或1111 1111之间)超出这个2进制大小Bit数就会出问题,那么char* ptr的ptr就是指针,所指向的内存数据每8Bit为一块(可以指一块或多块)也就是ptr寻址的间距,8Bit数生成一个地址*ptr++实际是前进8Bit数‘类型大小的距离),不然类型不统一寻址也无规则,那么内存错乱程序也无法跑通。如果是类声明的指针,会开辟类中存在所有类型按块排列后变成一个新类型,每个新类型块Bit数相同,也会按固定类内存块大小排列分配一个地址。

重点:1.创建什么类型的指针就是当前指针首地址与下一个地址的距离(Bit数);

           2.指针初始值必须给NULL;

           3.指针必须删除,包括函数局部作用域也需要删除。

我们不需要研究什么内存栈啊堆啊是怎么利用的,什么重下向上或是反方向都是虚拟的,大概有个理解就好。那些都是和main函数之前初始化的Bit数空间块,供我们编程存放数据用的,编译器有自己的利用逻辑。

                                                                                                                                                        2018.9.22 更新心得

下图从内存使用与分配结构剖析指针与多级指针运行原理:

自己写个demo测试比对此图领悟更快。

 下面俩幅图简单测试指针开辟内存后编译器会与普通类型对待。

 上图可以看见&a是get地址,赋值给*ptr_a失败。

 

 上图可以把*ptr_a理解成int类型的变量,由此可见(int *)这是完整的指针类型。

猜你喜欢

转载自blog.csdn.net/weixin_41913666/article/details/79816301