免费注册 查看新帖 |

Chinaunix

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

[C] 浅谈一下C语言中的指针与数组的关系 [复制链接]

论坛徽章:
0
71 [报告]
发表于 2012-12-24 18:22 |只看该作者
回复 69# sonicling

关于「为什么这么设计」的问题,自然是作者的解释是权威。计算机科学既不是考古也不是魔法,任何讨论都有文献和实际操作可以论证,所以从某种角度看确实挺没意思的。

至于标准,是一种描述「实现的方法和规范」的文档(what is),而不是解释设计原因的文档(why is),所以你的说法是没有说服力的。

另外,声明器部分请用英文,因为中文多有不便。换成英文,再参照形式定义,initializer 和 declarator 显然是平级的东西。

如果还是无法说服你,那么我举个例子:
  1. int foo = 2;
  2. void bar()
  3. {
  4.     int foo = foo; // 这里
  5. }
复制代码
如果你的说法是对的,「初始化是声明器的一部分」,那么初始化应该先于标识符存在(初始化是声明器的一部分,有了声明器,标识符 foo 才能被声明出来),声明时使用全局的 foo 作为初始化,所以这里 foo 的内容应该被初始化为 2。

但事实是,这里 foo 的值是不一定的,因为它被初始化为了自己。这里的 foo 先完成了声明工作,而后再被初始化。所以 initializer 和 declarator 是两个东西。

论坛徽章:
0
72 [报告]
发表于 2012-12-24 18:41 |只看该作者
回复 70# sonicling

于是跑去翻了下最新的 C++ 标准,发现并不是那么回事。

不能说因为 Initializer 是 8 Declarators 里的一节,所以 Initializer 是一种 Declarator。而且这一章开篇就说了:

A declarator declares a single variable, function, or type, within a declaration. The init-declarator-list appearing in a declaration is a comma-separated sequence of declarators, each of which can have an initializer.

init-declarator-list:
  init-declarator
  init-declarator-list , init-declarator
init-declarator:
  declarator initializer(opt)


可见这里和 C 语言标准是一样的,认为 declarator 和 initializer 是平级的东西。

论坛徽章:
0
73 [报告]
发表于 2012-12-24 19:20 |只看该作者
回复 72# timothyqiu


   
sequence of declarators, each of which can have an initializer



我没说initializer是declarator,我只说属于。就好象说这栋房子属于我,并不是说这栋房子是我这个人的一部分。

论坛徽章:
0
74 [报告]
发表于 2012-12-24 19:27 |只看该作者
回复 73# sonicling


所以说用中文会带来很多问题:

江苏属于中国:is a part of
这本书属于我:is owned by
丹顶鹤属于鸟:is a kind of

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

论坛徽章:
2
操作系统版块每日发帖之星
日期:2015-08-05 06:20:0015-16赛季CBA联赛之北控
日期:2019-02-13 22:56:03
76 [报告]
发表于 2012-12-24 21:58 |只看该作者
写的非常容易懂,啊,我怎么感觉,求写的内涵,并且多花时间去写不谢

论坛徽章:
2
羊年新春福章
日期:2015-04-27 16:56:53射手座
日期:2015-04-27 16:58:18
77 [报告]
发表于 2012-12-24 23:18 |只看该作者
对于初学者还是比较模糊,写得层次太深!

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
78 [报告]
发表于 2012-12-24 23:38 |只看该作者
回复 75# pmerofc

看来我认为的哲学和你认为的哲学是两个东西,鉴于思维模型和知识领域不同那么这个讨论就此打住不再继续了
让我想起erlang作者被问为什么要把erlang设计成那个样子,他大意回答说:每个人都有自己的脑袋,人们只是通过消息传递进行交流。

论坛徽章:
3
15-16赛季CBA联赛之山东
日期:2016-10-30 08:47:3015-16赛季CBA联赛之佛山
日期:2016-12-17 00:06:31CU十四周年纪念徽章
日期:2017-12-03 01:04:02
79 [报告]
发表于 2012-12-25 13:26 |只看该作者
回复 74# timothyqiu


    英文一样有很多问题. 需要我举几个歧义的例子吗?

    自然语言和形式语言是不一样的. C语言是形式语言. 但是不能用形式语言本身描述形式语言本身. 因此用自然语言描述C语言. 这和逻辑上, 判断命题真值需要比描述命题本身的语言"高一级"[称为元语言]相似. 也即自然语言是描述C语言这种形式语言的元语言. 所以描述C语言标准, 中文英文均可.

    任何自然语言都有歧义的例证. 自然语言常常上下文相关, 因此不如形式语言那么严格. 常常拿某一句中文带歧义而英文不带歧义的例证来证明英文比中文严格, 我个人觉得是...

    我想举出一些英文带歧义而中文不带歧义的例证也不是很困难.

==============

    计算机发源西方, 读英文比中文更准确什么的其实全无根据. 不过因为翻译的原因, 需要在一些 名词/概念 上达成共同的理解, 而这没有被规范化, 导致对译者的水平要求很高, 这才是问题.

==============

论坛徽章:
0
80 [报告]
发表于 2012-12-25 14:16 |只看该作者
回复 79# captivated

偏题啦~囧……

其实我的意思是他陈述观点时所用的「属于」和我理解时所用的「属于」含义不同,所以产生了误会。没有说中文英文孰优孰劣的问题。

至于之前我建议用英文,是因为更直观一些。

A. 因为文献里写着「init-declarator: declarator initializer」所以 declarator 和 initializer 是不同的两个概念
B. 因为文献里写着「init-declarator: declarator initializer」所以声明器和初始化是不同的两个概念

显然 A 比 B 更直观。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP