问一个初级问题:为何 C 指针这么难

2019-04-27 21:59:56 +08:00
 jziwenchen
我是从 C# / JAVA 开始学的编程 . 能从具体实例问题出发解释为何指针这么难吗?
10709 次点击
所在节点    C
89 条回复
qiukun
2019-04-29 08:24:07 +08:00
内存是一个 byte 数组,指针存 index,*号可以取对应内容,&某变量可以取地址(内存上的 index)
that's all
exploreXin
2019-04-29 09:26:55 +08:00
内存地址比喻成酒杯,那么地址里存的值就是酒,酒杯装酒,这是很好理解的。但是你见过装酒杯的酒杯吗,也就是酒杯里装的是酒杯,这就是指针变量的大致比喻,因为生活中不长见到这样的场景,所以也就不好理解了。如果要深入理解指针,前置知识有计算机体系结构,计算机硬件知识,另外还要有一些操作系统的知识打底,才能充分理解指针,觉得指针难理解只是前置知识不够,如果这些前置知识你都学的很溜的话,指针也就迎刃而解了,只是目前市面上大多都是业务逻辑程序员,函数类库都有人给封装好了,拿来直接用就行了,没有机会直接面对底层问题,所以对指针会很疑惑。
no1xsyzy
2019-04-29 09:36:07 +08:00
简单↔复杂
方便↔麻烦
这是两个不同的维度
其实 C 是简单而麻烦,而未经封装的指针正是麻烦的根源。
一种通用的封装叫做引用,正是 Java 的核心。
notreami
2019-04-29 10:20:53 +08:00
都不专业啊,说难或者不难的,上代码啊。。
扯犊子半天,写 ppt 嘛?
ismyyym
2019-04-29 11:17:02 +08:00
有人故意炫技,就会很难。

我武汉一 985 的,大学时计算机组成原理和汇编考试都 90+,但当时看很多代码,还是头晕。
marsgt
2019-04-29 13:01:28 +08:00
C 是老大哥,老大哥踩过的坑,后边小辈肯定就默默的绕过去了啊。。。所以 C 一开始就相当于没有任何任何优化,到了后边像是 C++、Java 啥的就都会或多或少在语法上进行了改进,所以你如果先学的是后边的,再学前边就会觉得原始。但其实 C 更多的会更贴合硬件的设计,所以掌握硬件原理以后,相对的学起来会对理解有所帮助~(但并不是说会了硬件学 C 就没压力了,只是有帮助而已;硬件由会到懂,这个阶段可以很长。。)
marsgt
2019-04-29 13:10:38 +08:00
而且好教材真的很少。。🤦‍♂
国产就不说了,大学接触过某位老同志的基本上都踩坑了吧。。唯一我看过一本还能看的是《 C 语言编程魔法书》,是讲 C11 的(很新哦)。
欧美译的大部头,有单讲指针的可以看看;日译的有本《明解 C 语言》,只看过几眼。不过就我对日译作品的整体观感而言,可以一看~
acgzy
2019-04-29 13:19:23 +08:00
先学习汇编的话指针就更容易理解了
ttgasia
2019-04-29 14:28:15 +08:00
@acgzy 非常赞成。
C 语言更像是直接从汇编进化来的,而 C#/JAVA 则是多次进化的结果。

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

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

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

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

© 2021 V2EX