指针变量就是保存地址的变量
指针初始化: int *p = &a;
int *p 等价 int* p :*p 是一个int
int* p,q; 只有p是指针变量,q不是。
指针变量赋初值,初值不为变量为常值,常值在系统中不像变量一样占用额外的内存,为代码段的一部分,系统会将常值在代码段中的地址传给指针,然而代码段不可以修改,当使用指针变量对常值进行修改,会报bus error。
可以通过指针直接修改 变量/对象 的内容。
在32位架构,地址是4个字节,即指针也是四个字节
在64位架构,地址是8个字节,即指针也是八个字节
&运算符只能对变量使用,不可以对运算式使用&运算符 ,(i++也不行!)
int a[10];
&a == a;
指针作为函数参数:void f(int *p)
传参时必须使用&取得某个变量的地址作为参数
指针函数作为参数会获得更改参数的权限
运算符*:访问地址上的变量,后接指针变量(地址变量)
函数参数表中的数组,实质上是指针
指针可以使用数组的运算符 [ ] 进行运算
数组变量是特殊的指针
数组变量本身就是一个地址
a[0] 等价于 *a
数组变量可以使用*运算符
数组变量是const 指针,不可以被赋值
int a [] 等价于 int * const a