指针总结与地址
指针是为了方便对地址直接操作而增加的一个中间操作符。
根据软件中间层的概念:
变量直接由高级操作;
地址直接由低级语言操作;
指针贯通高级语言与低级语言之间,是一个幽灵类型,直接对内存地址和内存地址中的数据双向操作。
最近在温故《C ++ primer》这本书,其中有一句话非常经典:
When attempting to understand pointer declarations, read them
from right to left.
为什么要有指针:
内存寻址的变种,是内存操作的接口;
方便数据在内存层面的组织;是数据结构的的核心支持;
是内存管理的有效工具;
提供了控制流跳转的开发层面支持。
变量:内存内容的标示;编程语言的直接操作对象;实质是操作内存对象;
存在于可执行文件的符号表中;在进程中没有存在,进程中只有内存数据。
指针的概念:(变量、类型、访问)
1)指针变量是一种特殊的变量;
2)指针变量作为变量,里面的数据是内存地址;
3)指针的类型决定了指针访问的内存大小;
4)指针内容语意:指针变量包含地址指向的内存单元的内容。
变量是与数据对应的概念。
指针变量是与内存地址对应的概念。
指针的本质是内存地址;变量的本质是内存数据。
指针可以无差别的访问进程的任何内存单元。
指针的操作:
指针的操作提供了内存的便捷访问方式(遍历、查询)。
指针的形式:
一、const指针
1、指针的本质是一个与地址相关的复合类型,它的值是数据存放的位置(地址);数组的本质则是一系列的变量。
2、数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。指针可以随时指向任意类型的内存块,它的特征是"可变",所以我们常用指针来操作动态内存。
3、当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。
因为第三条,当把数组名作为函数的形参进行传递时,该效果等同于传递一个同类型的指针。直接在程序当中调用 函数名(数组名)即可。