免费注册 查看新帖 |

Chinaunix

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

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

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

有关指针的问题

我用的是gcc-3.2.2-5啊。

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

有关指针的问题

发现一个有趣的现象,用g++编译可以通过,
gcc编译报错。

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

有关指针的问题

我在vc下++x可以通过而x++不能编译
在c和指针一书是这样说的,前缀和后缀形式的增值操作符都复制一份变量值的拷贝。用于周围表达式的值正是这分拷贝(在这里周围表达式就是&操作符)。前缀和后缀操作符的结果不是被它们修改的变量,而是变量值的拷贝,认识这一点非常重要。它之所以重要是因为它解释了你为什么不能像下面这样使用这些操作符:
++a = 10;
++a的结果是a值的拷贝,并不是变量本事,你无法向一个值进行赋值。
我理解根据这个理论应该得出楼主的两个赋值操作都不能通过才对,不知为什么在vc下&(++x)可以正确运行?

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

有关指针的问题

原帖由 "naiza" 发表:
我在vc下++x可以通过而x++不能编译

跟我的测试结果一样。

原帖由 "naiza" 发表:
在c和指针一书是这样说的,前缀和后缀形式的增值操作符都复制一份变量值的拷贝。用于周围表达式的值正是这分拷贝(在这里周围表达式就是&操作符)。前缀和后缀操作符的结果不是被它们修改的变量,而是变量值的拷贝,认识这一点非常重要。它之所以重要是因为它解释了你为什么不能像下面这样使用这些操作符:
++a = 10;
++a的结果是a值的拷贝,并不是变量本事,你无法向一个值进行赋值。

你测试过 ++a = 10 了吗?是从书上直接抄来的吧。与你说的恰恰相反,++a = 10 是合法的操作,从而实例证明了你的书上说的这段结论是错误的。事实是:++a 不产生变量的拷贝,所以使用时还是用的变量本身;而 a++ 要产生拷贝,使用时用的是这个拷贝对象。

原帖由 "naiza" 发表:
我理解根据这个理论应该得出楼主的两个赋值操作都不能通过才对,不知为什么在vc下&(++x)可以正确运行?

皮之不存,毛之焉附。

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

有关指针的问题

原帖由 "whyglinux" 发表:

皮之不存,毛之焉附。

兄台所言甚是!
上面我所引用的
“++a = 10;
++a的结果是a值的拷贝,并不是变量本事,你无法向一个值进行赋值。”
这我只是引用书上说的这个理论,而且这是我个人极力推崇的一本书。我想出现这个问题也许不是这本书这个理论有什么不妥,也许是在讨论这个问题之前的假设和作者不一致造成的吧,我并没有仔细考虑得出这个结论的是在什么编译环境下。sorry

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

有关指针的问题

没有必要说什么 sorry,你没有做错什么。虽然我们的测试证明书上的结论错误,但是却不能说明书上的描述(在当时)就一定是错的。原因多种多样:书上说的是C语言,说不定C就是这样处理的;或者以前的处理就是这么规定的,等等。

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

有关指针的问题

我的理解是在这一点上,c和c++处理不同的。
c是不允许这样做的,
c++允许这样做。
这个只有查语言的标准才能定论。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP