指针的实质就是变量,和普通变量没有区别。
但指针的用途和普通变量有所不同,指针变量应该用于存储另一个变量的地址,而不是随意用来储,一些int类型的数。
指针的出现是为了间接访问,而c语言的指针起源与汇编语言中的间接访问(实质是cpu中寻址方式的一种)(cpu有两种寻址方式直接寻址,间接寻址,特别的是寄存器间接寻址)特别是在arm这种cpu中广泛采用寄存器寻址这种方式。
间接寻址是cpu本身的特性,这个就决定了汇编语言必须实现间接寻址,就决定了在汇编以上的c语言也必须实现间接寻址。
指针的出现不是偶然,是c语言巧妙的把cpu的寄存器间接寻址和汇编语言间接寻址封装成了指针这种形式。
高级语言如java、c#没有指针是如何实现间接访问呢?
语言本身帮我们封装了间接寻址的功能,间接使用了指针。
指针标准使用方式
1 定义指针变量
2 给指针变量赋值(绑定指针)
3 解引用
指针变量绑定就是给指针变量赋值,也就是让指针变量指向另一个变量。当我们没有绑定之前不能解引用,绑定后才可以。
int a=23;
int *p;//第一步定义指针变量p
p=&a;//第二步绑定指针,让p指向变量a
p=(int *)4;//另一种绑定指针的方式,让指针指向地址为4的那个变量。
*p=555;//把555放到指针p指向的那个地址空间里面去。
注意
- 当我们用int *p定义一个指针变量p时,因为p在mian函数里面,是一个局部变量,所以也遵循c语言里面局部变量的一般规律(定义局部变量未初始化,此局部变量中的数字是随机的)。
- 此时如果解引用p相当于我们访问了这个随机数字为地址的内存空间,但此空间能否访问并不可知,所以解应用前一定要绑定赋值。
- 指针绑定的意义就是让指针能访问可以访问的地方。指针的解引用是为了能够间接访问变量。