雨天Zz 发表于 2020-9-2 22:07:25

指针问题

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

我觉的这个答案有问题,先计算++是因为++和&的优先级一样,所有要用结合性,结合性是从右向左,所以先计算++
&(aa++)是对aa这个元素值加1后,再对整体取址,结果不是aa的地址,请问我的说法对吗

sunrise085 发表于 2020-9-2 22:26:09

&aa++
&(aa++)
这两种写法是一样的,你的前半部分对于优先级和结合性的理解是对的。但是最后一句理解是不对的
你可以编程看看报错内容,错误如下:lvalue required as unary ‘&’ operand
这个错误是因为你将 & 用在了一个表达式上,但是取地址符只能用在变量上,不能用在任何表达式上,包括这种自增自减表达式。

还有一种写法
(&aa)++
这种写法与前两种就不一样, 但是也会报错,报错内容差不多,但是有区别:lvalue required as increment operand。这个错误是说自增加操作符应用对象错误,其实和上一个是一样的 ,只是上面的写法是 & 的应用对象错误,这次换成了 ++ ,因为自增自减操作符也是只能用在变量上,不能用在表达式上,也不能用在地址上。你可以尝试,对一个数组名使用自增自减,也是会出错的

雨天Zz 发表于 2020-9-2 22:49:33

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

对数组名使用++,不就是第一个元素首地址往后推一个嘛,也就是第二个元素的地址

sunrise085 发表于 2020-9-2 23:19:09

雨天Zz 发表于 2020-9-2 22:49
对数组名使用++,不就是第一个元素首地址往后推一个嘛,也就是第二个元素的地址

数组名是不能使用++或--的,指针可以。
不信你自己试试

雨天Zz 发表于 2020-9-3 19:24:16

sunrise085 发表于 2020-9-2 23:19
数组名是不能使用++或--的,指针可以。
不信你自己试试

数组名不就是数组第一个元素的指针吗?
页: [1]
查看完整版本: 指针问题