指针的详解

一、内存与指针的关系

每个单元都有内存编号,然后一个内存单元里能放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

六、指针的运算

指针+- 整数 

指针-指针 

指针的关系运算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值