鱼C论坛

 找回密码
 立即注册
查看: 1254|回复: 4

[已解决]指针问题

[复制链接]
发表于 2020-9-2 22:07:25 | 显示全部楼层 |阅读模式

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

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

x
若有定义:int aa[8];        C.  .&aa[0]++
C中&小于后置++的优先级所以&aa[0]++等价于
&(aa[0]++)所以先对aa[0]中的元素值加1后,在对aa[0]取址,结果还是aa[0]的地址
故C错

我觉的这个答案有问题,先计算++是因为++和&的优先级一样,所有要用结合性,结合性是从右向左,所以先计算++
&(aa[0]++)  是对aa[0]这个元素值加1后,再对整体取址,结果不是aa[0]的地址,请问我的说法对吗
最佳答案
2020-9-2 22:26:09
&aa[0]++
&(aa[0]++)
这两种写法是一样的,你的前半部分对于优先级和结合性的理解是对的。但是最后一句理解是不对的
你可以编程看看报错内容,错误如下:lvalue required as unary ‘&’ operand
这个错误是因为你将 & 用在了一个表达式上,但是取地址符只能用在变量上,不能用在任何表达式上,包括这种自增自减表达式。

还有一种写法
(&aa[0])++
这种写法与前两种就不一样, 但是也会报错,报错内容差不多,但是有区别:lvalue required as increment operand。这个错误是说自增加操作符应用对象错误,其实和上一个是一样的 ,只是上面的写法是 & 的应用对象错误,这次换成了 ++ ,因为自增自减操作符也是只能用在变量上,不能用在表达式上,也不能用在地址上。你可以尝试,对一个数组名使用自增自减,也是会出错的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-2 22:26:09 | 显示全部楼层    本楼为最佳答案   
&aa[0]++
&(aa[0]++)
这两种写法是一样的,你的前半部分对于优先级和结合性的理解是对的。但是最后一句理解是不对的
你可以编程看看报错内容,错误如下:lvalue required as unary ‘&’ operand
这个错误是因为你将 & 用在了一个表达式上,但是取地址符只能用在变量上,不能用在任何表达式上,包括这种自增自减表达式。

还有一种写法
(&aa[0])++
这种写法与前两种就不一样, 但是也会报错,报错内容差不多,但是有区别:lvalue required as increment operand。这个错误是说自增加操作符应用对象错误,其实和上一个是一样的 ,只是上面的写法是 & 的应用对象错误,这次换成了 ++ ,因为自增自减操作符也是只能用在变量上,不能用在表达式上,也不能用在地址上。你可以尝试,对一个数组名使用自增自减,也是会出错的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-2 22:49:33 | 显示全部楼层
sunrise085 发表于 2020-9-2 22:26
这两种写法是一样的,你的前半部分对于优先级和结合性的理解是对的。但是最后一句理解是不对的
你可以编 ...

对数组名使用++,不就是第一个元素首地址往后推一个嘛,也就是第二个元素的地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-2 23:19:09 | 显示全部楼层
雨天Zz 发表于 2020-9-2 22:49
对数组名使用++,不就是第一个元素首地址往后推一个嘛,也就是第二个元素的地址

数组名是不能使用++或--的,指针可以。
不信你自己试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-3 19:24:16 | 显示全部楼层
sunrise085 发表于 2020-9-2 23:19
数组名是不能使用++或--的,指针可以。
不信你自己试试

数组名不就是数组第一个元素的指针吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-13 02:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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