指针
A pointer:
It is a variable that store the memory address of the variable
指针是一个变量,但是里面存储的是另一个变量的内存地址,里面存储的是一个变量的内存地址,它的大小与操作系统的位数有关,64位操作系统指针大小为8字节,32位为4字节
不同类型的指针对于都是指向变量的首地址,其涵盖的地址范围是不一样的,int *p
和long *p
类型是不一样的
通过指针获得值叫做解引用
int a = 10;
int *p = &a;
*p; // 解引用
指针可以指向指针,可以存在多级指针
int a = 10;
int *p = &a; // p中存储a的内存地址
int **pp = &p; // pp中存储p的内存地址
int ***ppp = &pp; // ppp中存储pp的内存地址
const pointer 和 pointer to const
const pointer:
常量指针,是指针变量本身的值无法改变,比如一个常量指针指向了变量a,那么它的地址就是a的值,此时他无法再次指向其它的变量,可以通过常量指针修改其指向的值。
pointer to const:
指向常量的指针,指针指向的变量无法被修改,但是它可以指向不同的变量,即它可以指向a,又可以指向变量b,但是无法通过其修改a和b的值一句话说,
const pointer
是指针变量本身是常量,pointer to const
是指针指向的变量是常量
int a = 10;
int b = 20;
// const pointer
const int *p = &a;
p = &b; // 合法
*p = 20; // 不合法
// pointer to const
int *const p1 = &a;
*p1 = 20; // 合法
p1 = &b; // 不合法