免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 59402744
打印 上一主题 下一主题

有关指针的问题 [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
11 [报告]
发表于 2004-04-21 20:33 |只看该作者

有关指针的问题

试过了,不可以,为什么呢?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
12 [报告]
发表于 2004-04-21 22:36 |只看该作者

有关指针的问题

把表达式的概念弄清楚了,
看看那些表达式的值是多少。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
13 [报告]
发表于 2004-04-21 22:41 |只看该作者

有关指针的问题

x++不是先使用x然后再++吗?也就是说,第二个式子应该是先取的x的地址啊,然后生成不能取地址的临时变量。不是这样吗?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
14 [报告]
发表于 2004-04-21 22:45 |只看该作者

有关指针的问题

怎么是先取x的地址呢?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
15 [报告]
发表于 2004-04-21 22:50 |只看该作者

有关指针的问题

那是取的谁的地址?一个临时变量的?那个临时变量是5还是6呢?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
16 [报告]
发表于 2004-04-21 22:58 |只看该作者

有关指针的问题

在这里,x++还是++x都是一个表达式,
表达式的值是一个5或6 ,你对它取地址什么意思呀。
我没编译这个程序,不过我想错误信息应该说明了这一点。

论坛徽章:
0
17 [报告]
发表于 2004-04-22 00:15 |只看该作者

有关指针的问题

如果“&”是取址运算符,那么它的运算对象只能是一个“左值”(lvalue)对象(可以理解成我们所说的变量,包括数组名);而 5、1.3、x+y 等是非左值对象,相应地叫做“右值”对象,所以诸如 &5、&1.3、&(x+y)等等都是非法的。

“++”运算符又有前加(++x)和后加(x++)的区分。虽然没有找到确切的资料来证明,我个人认为对于“++”运算编译器其实是按照“先完成++运算,然后再使用”这样的原则进行的,尽管前加是“先++后使用”,后加是“先使用后++”:
  • &(++x) :x 自加,++运算完成后,再使用 x,所以 &(++x) 合法。
  • &(x++) :为了能使用到 x 的值,事先生成一个无名对象,用来保存 x 的值,然后 x 自加。使用的时候其实使用的是临时生成的无名对象;使用无名对象的值是合法的,但是由于是无名对象,是一个右值对象,因此对其进行“&”运算是非法的,所以说 &(x++)是非法的。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
18 [报告]
发表于 2004-04-22 07:47 |只看该作者

有关指针的问题

呵呵,两种都是编译出错,提示是左值有问题。估计是都要生产临时变量,而只不过变量的值不一样罢了。而平时教材上说的先++后用x还是先用x后++只不过是为了好理解罢了。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
19 [报告]
发表于 2004-04-22 09:59 |只看该作者

有关指针的问题

>;>;&(++x) :x 自加,++运算完成后,再使用 x,所以 &(++x) 合法。
编译能通过?

论坛徽章:
0
20 [报告]
发表于 2004-04-22 10:04 |只看该作者

有关指针的问题

>;>; 呵呵,两种都是编译出错,提示是左值有问题。估计是都要生产临时变量,而只不过变量的值不一样罢了。

前加(++x)不会产生临时对象,这就是为什么在C++的循环中广泛使用前加的原因。

在我的 g++ 3.0.4 上编译,&(++x) 是合法的,而 &(x++)是非法的。不知 aero 用的是什么编译器。结果如果真如你所说,那说明编译器对“++”的处理是不同的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP