SilverAz 发表于 2022-10-31 22:29:56

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

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

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

p2为什么可以自增

人造人 发表于 2022-10-31 22:48:26

p1是一个指针,这个指针指向的是一个数组,这个数组有5个元素,每一个元素都是int
你说的不能自增指的是?

桃花飞舞 发表于 2022-10-31 22:51:23

p1是数组指针本质是一个指针p1指向的对象的类型为int ,定义指向包含5个元素的一维数组的指针变量p1,没试过自增p1,数组指针,行指针,(加一次偏移一行),你这里不能自增可能是因为 p1 = &temp temp并不是二维数组,自增后会访问到未知区域,如果是指针变量我觉的都可以自增,一般用于二维数组的参数传递的形参。p2是指针,p2++表示指针移动到下一个元素的起始地址,p2是指针变量,其实是个变量。变量自然可以自增。

jackz007 发表于 2022-10-31 22:55:53

       p1 是一个末维为 5 的int 型二维数组的指针,现在, p1 指向了一个带有 5 个元素的一维整型数组,首先,p1 是指针变量,就是说,p1 是完全可以接受赋值的,那么,如果 p1 增减 1 的跨度有多大呢?没错,是 5 个整型元素,当 p1 增减 1 的时候,都会脱离数组 temp 的范围,指向其它变量的存储区。而我们对这些存储区完全不了解,什么也干不了,这就是不能改变 p1 的根本原因。

两手空空儿 发表于 2022-11-1 11:10:27

本帖最后由 两手空空儿 于 2022-11-1 11:13 编辑

通俗一点说,你把temp看成一个大包裹, (*p1) = &temp就是指向这个包裹的指针, *p1的时候就是打开了这个包裹,打开之后发现里面还有5个小包裹,所以这时*p1是指向了第一个小包裹,*p1+1就指向第二个小包裹
如果这时有人用了p1+1,显然,这就指向了大包裹之外的地方,没人能确定那里有什么东西,操作那里的数据,很可能就BOOM~~~~~~
a, *p2=a是把p2指向了第一个小包裹,这时的*p2就是第一个小包裹里的东西,*p2 +1 就是把里面的东西+1了

jhq999 发表于 2022-11-1 12:10:16

4楼正解,除非定义新变量=*p1,否则没有左值
页: [1]
查看完整版本: 为什么数组指针不能用自增