一、内存与指针的关系
每个单元都有内存编号,然后一个内存单元里能放8给比特位(bit),然后每个内存单元都有着自己的编号,我们也称为地址。而在计算机语言中我们将地址也叫做指针;
所以这边有个关系
内存编号==地址==指针;
二、指针变量与地址
例如
int *p=&a;
这边的p为指针变量,*代表其是指针,int是他的类型,&a取啊的地址,这边也是是说是将指针变量的指向地址为a,也是p执行那个地址;
u针变量与解引用符号(*)
例如
int a = 10;
int * pa = &a;
这边pa存储的是a的地址,然后*pa指向的就是a的内容10;
四、指针变量的大小
指针变量的⼤⼩和类型⽆关,只要是指针变量,在同⼀个平台下,⼤⼩都是⼀样的;
• 32位平台下地址是32个bit位,指针变量⼤⼩是4个字节
• 64位平台下地址是64个bit位,指针变量⼤⼩是8个字节
• 注意指针变量的⼤⼩和类型是⽆关的,只要指针类型的变量,在相同的平台下,⼤⼩都是相同的。
五、指针类型的意义
1.指针的解引用
指针的类型决定了,对指针解引⽤的时候有多⼤的权限(⼀次能操作⼏个字节)。
⽐如: char* 的指针解引⽤就只能访问⼀个字节,⽽ int* 的指针的解引⽤就能访问四个字节
2、指针加整数
类型*(p+i)
类型决定移动的单位,i决定移动的次数
例如 int*(p+1)就移动一次,一次移动四个单位;
char*(p+2)移动2次,一次移动一个单位;
结论:指针的类型决定了指针向前或者向后⾛⼀步有多⼤(距离)。
3、void*指针
void* 指针 在指针类型中有⼀种特殊的类型是 void * 类型的,可以理解为⽆具体类型的指针(或者叫泛型指 针),这种类型的指针可以⽤来接受任意类型地址。但是也有局限性, void* 类型的指针不能直接进 ⾏指针的+-整数和解引⽤的运算
六、const修饰指针变量
1、int const*p;首先const放在*的右边限制的是*p,也是限制p指向的内容不予许被修改;
然后指针变量的地址p是可以修改的;
例如;
int n = 10;
int m = 20;
const int* p = &n;
*p = 20;//error
p = &m;//ok
2、int*const p此时const在的右边限制的是指针变量p;也是是p存储的地址无法在被改变,而*指向的内容可以改变;
int n = 10;
int m = 20;
int *const p = &n;
*p = 20;//ok
p = &m;//error
3、还有一种就是*的左右俩边都有const 修饰,那么无论是指针变量p还是*p都无法被改变。
int n = 10
int m = 20;
int const * const p = &n;
*p = 20; //error
p = &m; //error
六、指针的运算
指针+- 整数
指针-指针
指针的关系运算