指针应该叫做标识符变量

2016-10-04 14:18:28 +08:00
 deepkolos

花了 4 天时间写的第一篇逻辑博文,欢迎各路大神前来纠错~~

大二底层知识不多,所以哪有有用词不当的,请见谅~~ http://deepkolos.cn/#articles/{ADF360A2-BDDF-8A32-B617-ECF090BA56F1}.html

3702 次点击
所在节点    程序员
32 条回复
xxxyyy
2016-10-04 14:59:47 +08:00
为什么不看英文的定义呢?
reus
2016-10-04 15:46:02 +08:00
这种基础的东西,就不用自己“推测”、“试验”什么的了,拿本好的教材,好好看看,好好理解,全盘接受就行。
指针就是指针,这是个有明确定义的概念,也是个被广泛接受的表达这个概念的词汇。
identifier 、 variable 也是有明确定义的概念,“指针应该叫做标识符变量”根本就是概念理解不透彻,才会得出的结论。

“一个推论:在高级语言中,计算机内部的东西均以标识符做映射,表示,操作,指定(不允许在代码中直接指定地址操纵,比如*(0x00000001) = 3,原因是没有该地址的配置信息,而地址的配置信息储存在标识符当中)”

就这一段话,就诸多错误:
“计算机内部的东西”,这叫“内存”。
“以标识符做映射”,错,表示内存存储位置的叫“变量”。标识符( identifier )是词法 /语法分析阶段的概念,一个标识符可能表示变量,可能表示类型,例如 int a; 这句, int 这个标识符表示整数类型, a 这个标识符表示一个变量。标识符还可能表示常量、模块等等,取决于不同语言的设计。但与内存映射的,都叫“变量”。
“配置信息”,术语叫“类型信息”,这是关联到变量的,由编译器在类型分析 /推导阶段得出,它并不是“储存在标识符当中”,而是每个变量都有关联的类型信息。
在 C 里, *((int*)(999)) = 33; 是可以通过编译的,执行时才会出错。所以直接读写某个地址是可以的,只要给出类型信息。这里是不需要定义变量的。所以整个“推论”是错的。

“观察”、“推测”、“交叉验证”,不是学习 C/C++应有的方法,稍微靠谱的教材都会讲到 const 怎么修饰的,根本用不着你猜测。
总之,是学艺未精而想得太多。
bsidb
2016-10-04 15:55:04 +08:00
同意楼上,多思考是好,不过还是好好把基础打实。
Andiry
2016-10-04 15:56:26 +08:00
指针就是地址,有那么难吗?
Shura
2016-10-04 16:37:48 +08:00
就是内存地址啊
GentleSadness
2016-10-04 16:44:57 +08:00
底层学是好,但才看几句就学人家写博文,还想自己定义指针该叫什么就是坑
lance6816
2016-10-04 16:48:22 +08:00
什么叫民科
deepkolos
2016-10-04 17:42:56 +08:00
补充:经过师兄的指点,需要给地址绑定类型信息就可以了*(int*)(0x0018ff44)就可以按照 int 类型的方法操作改地址对应的内存块了
deepkolos
2016-10-04 17:47:17 +08:00
@reus 的确是,承认,不过我从这猜测,我才发现了很多关于指针不常见的使用方式
q397064399
2016-10-04 17:52:14 +08:00
入乡随俗,国内一般分为

引用变量
指针变量
拷贝传递变量 (值拷贝 分为对象拷贝 和 基本类型拷贝)
对象拷贝分为 浅拷贝 和 深拷贝

Java 貌似只有引用传递,很多对象 只支持浅拷贝

C++全都支持

Python 只有引用

C 支持 值传递 还有 指针变量
lechain
2016-10-04 18:01:14 +08:00
指针就是指针,哪来的这啥那啥的。就是指针咯,汉语词汇“指针”有那么难理解吗?
ZEOH
2016-10-04 18:52:59 +08:00
另外中文句子中请用全角标点。
deepkolos
2016-10-04 19:05:44 +08:00
@ZEOH 写代码方便,所以输入法设置了中文状态也使用英文标点了
kmyzzy
2016-10-04 19:23:08 +08:00
思而不学则殆
deepkolos
2016-10-04 19:25:24 +08:00
@kmyzzy 对,谢谢提醒~~
zhangbohun
2016-10-04 19:27:51 +08:00
没关系的,积累经验教训,学习和思考都很重要的。
deepkolos
2016-10-04 19:36:59 +08:00
对了关于 const 我还发现一点:
long long test2 = 3;
const long const long const const const & const const ref = test2;
可以通过编译,正确运行~发现 const 可以放在很多地方,并且冗余也可以,这个不知道如何解释~~~求大神助攻
deepkolos
2016-10-04 19:38:37 +08:00
Balthild
2016-10-04 20:24:22 +08:00
学而不思则神棍,思而不学则民科
zmj1316
2016-10-04 20:46:33 +08:00
@deepkolos 下次放这种**代码还宣称编译通过的记得带上你的编译选项,顺便多挑几个编译器试试

说真的,没想到这种本来就是人为创造出来的领域还能出民科,长见识了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/310509

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX