笔记「 让你不再害怕指针——C指针详解(经典,非常详细)」2024年3月27日

一、细说指针
1、指针的类型

只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。

这是指针本身所具有的类型

2、指针所指向的类型

把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型

指向的类型决定了编译器将把那片内存区里的内容当做什么来看待

3、指针的值:

一个指针的值是XX,就相当于说该指针指向了以XX 为首地址的一片内存区域

同样的 一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址

二、指针的加减:

 对指针的加减操作就是将指针所指向的地址向高地址或低地址移动指针所指向类型的字节长度

char a[20];
int *ptr=(int *)a; //强制类型转换并不会改变a 的类型
ptr++;

例子中,指针本来指向数组a的0号单元开始的4个字节的数据(int长度为4字节)

指针ptr加了1,表示其指向的地址向高位移动了四个字节(int长度为4字节)

又因为char的长度为1字节,所以最终结果是指针ptr指向了数组a的4号单元开始的4个字节的数据

三、运算符&和* 

&a的结果是一个指针,指针的类型是a的类型加个*,所指向的类型是a的类型,所指向的地址是a的地址

*p的结果是p所指向的内容,它的类型是p所指向的类型,地址是p所指向的地址

int a=12; int b; int *p; int **ptr;
p=&a; //&a 的结果是一个指针,类型是int*,指向的类型是
//int,指向的地址是a 的地址。
*p=24; //*p 的结果,在这里它的类型是int,它所占用的地址是
//p 所指向的地址,显然,*p 就是变量a。
ptr=&p; //&p 的结果是个指针,该指针的类型是p 的类型加个*,
//在这里是int **。该指针所指向的类型是p 的类型,这
//里是int*。该指针所指向的地址就是指针p 自己的地址。
*ptr=&b; //*ptr 是个指针,&b 的结果也是个指针,且这两个指针
//的类型和所指向的类型是一样的,所以用&b 来给*ptr 赋
//值就是毫无问题的了。
**ptr=34; //*ptr 的结果是ptr 所指向的东西,在这里是一个指针,
//对这个指针再做一次*运算,结果是一个int 类型的变量。

文章出处:让你不再害怕指针——C指针详解(经典,非常详细)_c语言指针-CSDN博客

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小拭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值