免费注册 查看新帖 |

Chinaunix

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

[C] 以其昏昏,使人昭昭? [复制链接]

论坛徽章:
8
CU大牛徽章
日期:2013-04-17 10:59:39CU大牛徽章
日期:2013-04-17 11:01:45CU大牛徽章
日期:2013-04-17 11:02:15CU大牛徽章
日期:2013-04-17 11:02:36CU大牛徽章
日期:2013-04-17 11:02:58技术图书徽章
日期:2013-12-04 10:48:50酉鸡
日期:2014-01-03 10:32:30辰龙
日期:2014-03-06 15:04:07
201 [报告]
发表于 2010-04-15 10:09 |只看该作者
本帖最后由 shan_ghost 于 2010-04-15 11:50 编辑

实例分析: 错误的概念会导致什么危害?


其实,很久以来就一直想说这个问题。但这个问题是如此的微妙,以至于懂了的人不说也就懂了,不懂的人怎么说他都想不通你想表达什么——你的任何举例都会被他当做荒谬的笑话,因为这些例子看起来果然是如此的荒谬——更不用说理解你的论点了。


幸好,本主题下就出现了一个鲜活的标本,可以拿来研究,可以充分展示“当一个人学偏后,他会变成什么”。


首先,是一个基本概念——C++的: int &j=i

这个概念是什么意思,多少学过点C++的想必都知道(但,被那些蔑视读者智慧,用“引用就是不使用*的指针”混淆视听的作者影响过的读者,可能就已经出了偏差)。

所以,我想这里还是有必要解释下的: int &是引用的定义语法,&在这里和地址无关;上述语句的整个作用是:声明了另一个符号j(标识符j),并让它和标志符i关联的变量关联——于是,在此之后,i和j没有任何区别:绝对不是什么j是不带*的指针。



请回溯前面的帖子。

当一位先生看到这个他不理解/理解不正确的语句,他会如何呢?

他会:
1、认为&就是取地址
2、他甚至脑中补全,帮我“纠正”错误的写法,把问题修改为: int *j=&i
3、现在,他开始振振有词,质问我i和j究竟是一个变量,还是两个变量



这里面就很明显的显现出,一个基础不牢的人,在遇到稍微深一些的知识时会怎样了:

1、就好像歪曲 int &j=i 为 int *j=&i 一样,他会把“真实的世界”扭曲,以适应他脑中扭曲了的知识
——我叫这个为 幻听/幻视 效应。
——所谓 幻听/幻视 效应,指的就是因为头脑中的错误理解,导致看到的客观世界被扭曲
(比如我明明写了int &j=i,在他眼里、脑子里就演化成了int *j=&i)

2、由于扭曲了的“引用”概念,他会自动修改脑中那些或者一知半解、或者本来已经精确理解了的概念的理解
——我叫这个为 扯动 效应
——所谓 扯动 效应,指的就是因为让头脑中进入了错误概念,导致已有的正确概念也不得不调整位置,以便不与错误概念冲突,于是就导致整个知识大厦被歪曲。

比如说,重定位 程序的定义是什么,懂点汇编的肯定不会出偏。但……


3、由于 幻听/幻视 以及 错误概念 扯歪 了知识大厦,此人必然会变得无法思考(或者他自以为是智者,但别人一看,你这一套一套的……这都算什么事啊,太可笑了)——逐一检查,他会发现自己检查过的概念都是对的(当然,他更可能检查的是那些被“扯歪”了的概念而不是真正的故障发生点)

想找到这个根本故障点可不容易,必然是个旷日持久的长期工作;而且还可能随着新引入的概念的进一步歪曲而病入膏肓。

——我很讨厌和这种人对话。尤其是口头场合。你说着他歪着,歪着歪着你就会发现是自己而不是他全错了,因为他很可能对你的每句话都出现了幻听/幻视,而你不可能回溯过去证明自己没这么说过。
——幸亏,在论坛上可以翻查之前的言论,很容易就能发现话题究竟是在哪里被他扯歪的
——然而,既然这种善于歪话题的人,是因为某些错误理解扯歪了他的知识大厦,那么可以想象,他会对一个问题会从多少个角度多少个方面冒出多少匪夷所思的想法——既然你不是他肚子里的蛔虫,怎么可能知道他脑子在哪里抽筋呢?难道你有办法纠正他脑袋里整本整本书的偏差、最终在洋洋洒洒几千万字后找到问题根源?
所以,除了苦笑,对这种人的喋喋不休,你还能做什么?

这就是我为何不愿和那些从小学知识就开始歪的人对话的原因(当然,相信本贴中还没有这种人;不过CU论坛还是颇有几个著名人物属于这类的)


好吧,现在知道基础有多重要、多么不允许出偏了吧?知道为何说“越是给初学者看的东西,越是不允许出错”了吧?

那么,如何弥补或者防止这个缺陷呢?

古人有句话叫“温故而知新”;
我自己的经验也是:没事就多看多琢磨基础性的东西,看别人从多个角度说同一个最傻最简单的基础问题——别嫌那些经典书简单或者喋喋不休的反复废话一个基础概念(甚至是反复从最古老最黑暗的时代开始废话,告诉你最早的是怎么造方轮子的、方轮子有什么缺陷。我知道很多人很讨厌看这种东西,但其实这些往往才是真正的精华所在)——常常看到他的一句话就忽然一下子就明白了某个怎么都想不明白的困难问题。

论坛徽章:
0
202 [报告]
发表于 2010-04-15 11:15 |只看该作者
#######
首先,是一个基本概念——C++的: int &j=i
这个概念是什么意思,多少学过点C++的想必都知道(但,被那些蔑视读者智慧,用“引用就是不使用*的指针”混淆视听的作者影响过的读者,可能就已经出了偏差)。
所以,我想这里还是有必要解释下的: int &是引用的定义语法,&在这里和地址无关;上述语句的整个作用是:声明了另一个符号j(标识符j),并让它和标志符i关联的变量关联—— 于是,在此之后,i和j没有任何区别:绝对不是什么j是不带*的指针。
#######

没想到你再回,那我们就说说引用吧,我的主要设计语言是c++,不是python:
我没有跟你讨论引用的例子,就是害怕你把c++的语法部分在混淆进来,可惜你还是揪着不放。
你的问题在意对与我们讨论的问题和这个问题的范畴没有清晰的概念。
引用是对对象的引用,无论引用的是变量还是指针什么,当然现在大部分编译器还是用指针来实现的。
再看你的原帖:
##########
所以,int i 就定义了一个变量,这个变量被我们命名为i——i是标志符,不是变量;但我们可以通过i这个标志符来找到变量i。
通过c++的引用机制,我们可以再定义一个标识符j,让j同样和i代表的那个变量关联:
int &j=i;
注意i 、j都是一个标识符,而且它们还是不同的标志符,只是在背后,这两个标识符关联了同一个变量。
i、j关联的那个变量在哪里呢?
不知道。
根据程序逻辑的不同,编译器可以把它放在内存里,可以把它放到寄存器里,甚至还可以把它优化掉——不存在于内存,不存在于寄存器,只是干净利索的删除掉。
##########
这里你混淆了编译编译时刻的符号表和语言层的变量,标示符的概念。
编译过后的代码和运行时刻的代码,和源程序完全两码事,你完全可以在写一个c的编译器,加载器,和目前的
架构完全不一样。语法规则是语法规则,实现是实现







实例分析: 错误的概念会导致什么危害?


其实,很久以来就一直想说这个问题。但这个问题是如此的微妙, ...
shan_ghost 发表于 2010-04-15 10:09

论坛徽章:
0
203 [报告]
发表于 2010-04-15 11:17 |只看该作者
如果你反驳我的话,请正面回答问题,论坛上向你这样的乱扯别的东西的太多了,不胜其烦。

论坛徽章:
0
204 [报告]
发表于 2010-04-15 11:23 |只看该作者
给你统计一下,看看你自己写的好了:
###
如: 对语言使用者,有:
1、标识符i就是变量i
2、变量i就是内存单元0x123456
3、内存地址0x123456是变量i所在内存单元的索引
###
在我们讨论中关于表示符 i 和变量i
你一共有三种说法:
1: 标示符i被关联到变量i
2: 标示符i代表标量i
3:  标识符i就是变量i
这三个句子有区别吗?
另:
####
关联=be referenced by:
The variable can be referenced by identifiers
####
reference的意思请你仔细考虑,在考虑你的用词。

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
205 [报告]
发表于 2010-04-15 13:11 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
206 [报告]
发表于 2010-04-15 13:27 |只看该作者
一个个都开始咬文嚼字了

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
207 [报告]
发表于 2010-04-15 13:27 |只看该作者
一个个都开始咬文嚼字了

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
208 [报告]
发表于 2010-04-15 17:07 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
209 [报告]
发表于 2010-04-15 17:13 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
210 [报告]
发表于 2010-04-16 07:08 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP