目录
一、指针是什么?
指针是程序数据在内存中的地址,而指针变量是用来保存这些地址的变量。
二、指针定义
类型 *变量名称
int a=10; a是一个普通的整型变量
int *p; //p与*结合,所以说明p是一个指针,然后再与int 结合,说明指针所指向的内容的类型为int 型.所以p是一个返回整型数据的一级指针
p=&a; //p相当于a取地址
*p=a; //解引用
int **q; //q先与*结合,则q 是一个指针,然后再与*结合,说明指针所指向的元素是指针,然后再与int 结合,说明该指针所指向的元素是整型数据.所以q是一个返回整型数据的二级指针
q=&p; //q相当于一级指针取地址
**q=a; //q解一次引用(*q)==p,再解一次引用(**q)==a
指针大小:x86系统下指针大小为4字节(int指针类型,double指针类型,char指针等)
x64系统下指针大小为8字节(int指针类型,double指针类型,char指针等)
定义数组int arr[5]={1,2,3,4,5} 其中[]也有解引用的能力
int *p=arr;
*p<=>*(arr+0) //1
*(p+2)<=>*(arr+2)<=>arr[2] //(p+2)首地址向后偏移两个单元格,解引用指针指向第三个单元格的元素3;arr[2]=3
三、const结合指针
C++的语言规范:const修饰的是离它最近的类型
1.const与一级指针结合
代码如下(示例):
(1)错 const作用于*p,则不能通过解引用(*p)改变a的值
(2)对 p本身没有被const限制,所以指针变量p的指向可以改变
(3)对 const作用于p本身,*p没有被const限制,可以通过解引用(*p)改变a的值
(4)错 const作用于p本身,所以指针变量p的指向只能指向a的地址,不可以被改变
(5)(6)错
*p和p本身都被const所限制,不可以通过解引用(*p)改变a的值,也不能改变指针变量p的指向
(7)错
a,b皆为常变量 "const int *" 类型的值不能用于初始化 "int *" 类型的实体
const int *p=&a;正确
2.const与二级指针结合
代码如下(示例):
(1)对(2)对
二级指针s1没有做任何限制,二级指针s1指向一级指针q的地址,不能通过*p改变a的值但可以通过**s1改变a的值
(3)对(4)对(5)错
const修饰**t1,不能通过**t1改值
(6)错(7)对
const修饰*s2,不能通过*s2操作
**s2未做限制