鱼C论坛

 找回密码
 立即注册
查看: 3090|回复: 5

为什么数组指针不能用自增

[复制链接]
发表于 2022-10-31 22:29:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
p2存放的是数组a的地址,所以printf里*p2是int 值

p1是什么意思,又为什么不可以自增

p2为什么可以自增
1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-31 22:48:26 | 显示全部楼层
p1是一个指针,这个指针指向的是一个数组,这个数组有5个元素,每一个元素都是int
你说的不能自增指的是?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-31 22:51:23 | 显示全部楼层
p1是数组指针本质是一个指针  p1指向的对象的类型为int [5],定义指向包含5个元素的一维数组的指针变量p1,没试过自增p1,数组指针,行指针,(加一次偏移一行),你这里不能自增可能是因为 p1 = &temp temp[5]并不是二维数组,自增后会访问到未知区域,如果是指针  变量我觉的都可以自增,一般用于二维数组的参数传递的形参。p2是指针,p2++表示指针移动到下一个元素的起始地址,p2是指针变量,其实是个变量。变量自然可以自增。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-31 22:55:53 | 显示全部楼层
       p1 是一个末维为 5 的int 型二维数组的指针,现在, p1 指向了一个带有 5 个元素的一维整型数组,首先,p1 是指针变量,就是说,p1 是完全可以接受赋值的,那么,如果 p1 增减 1 的跨度有多大呢?没错,是 5 个整型元素,当 p1 增减 1 的时候,都会脱离数组 temp 的范围,指向其它变量的存储区。而我们对这些存储区完全不了解,什么也干不了,这就是不能改变 p1 的根本原因。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-1 11:10:27 | 显示全部楼层
本帖最后由 两手空空儿 于 2022-11-1 11:13 编辑

通俗一点说,你把temp[5]看成一个大包裹, (*p1)[5] = &temp就是指向这个包裹的指针, *p1的时候就是打开了这个包裹,打开之后发现里面还有5个小包裹,所以这时*p1是指向了第一个小包裹,*p1+1就指向第二个小包裹
如果这时有人用了p1+1,显然,这就指向了大包裹之外的地方,没人能确定那里有什么东西,操作那里的数据,很可能就BOOM~~~~~~
a[100], *p2=a是把p2指向了第一个小包裹,这时的*p2就是第一个小包裹里的东西,*p2 +1 就是把里面的东西+1了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-1 12:10:16 | 显示全部楼层
4楼正解,除非定义新变量=*p1,否则没有左值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 23:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表