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

2019-04-27 21:59:56 +08:00
 jziwenchen
我是从 C# / JAVA 开始学的编程 . 能从具体实例问题出发解释为何指针这么难吗?
10659 次点击
所在节点    C
89 条回复
XiLemon
2019-04-28 08:00:06 +08:00
看下 CSAPP 里面的第三章,有些基础的汇编内容和 C指针的讲解
jzq526
2019-04-28 08:10:03 +08:00
指针比较难,不过多练练就好了,你可以试试写几个链表之类的练习,很快就能理解
xuanbg
2019-04-28 08:12:14 +08:00
指针很难理解吗?你拿张白纸画一些格子,里面写上一些数字。指针就是第 x 行第 y 列的 xy 值而不是那个格子里面写的数字。
smallX
2019-04-28 08:16:11 +08:00
JAVA 引用型变量
MonoLogueChi
2019-04-28 08:20:27 +08:00
@mmdsun C#里是个残废的指针,而且需要 unsafe,最重要的是没有必要用指针
babedoll
2019-04-28 08:38:12 +08:00
不难的,如果大学刚学 c 语言,去网上看看博客就懂了
zyy314680012
2019-04-28 08:43:37 +08:00
指针难吗?不熟的话画图分析。
DiamondY
2019-04-28 08:49:00 +08:00
了解一下微机原理(计算机原理)就好了,有些概念是需要一些基础作为媒介去理解的
wizardoz
2019-04-28 09:04:30 +08:00
指针就是内存你地址,捋清楚了这个就不难
xiangdong1987
2019-04-28 09:33:07 +08:00
指针不难理解,但是难于使用,用好指针的都是高手
karllynn
2019-04-28 09:57:02 +08:00
指针能有 monad 难么
dazhangpan
2019-04-28 10:13:07 +08:00
指针本身就是一个存储内存地址的变量,困难的部分不是它的概念混乱或是操作复杂,而是你可以给内存中的数据不同的解释。同样一段数据 00101011101010101,可以是 int,可以是 float,也可以是某一个结构体,这完全取决于你。其实指针的本质是你如何创造运行在计算机里的这个小世界,可以参看拙文《唯识与 C 语言指针》:https://decodezp.github.io/2018/12/31/thoughts2-weishi-c-pointer/
BingoXuan
2019-04-28 10:17:08 +08:00
现有架构上,所有数据都在存储设备上,当修改任何数据时候,你必须知道数据在哪。所以就抽象为指针。任何一个值都有着一个地址,或者这个值就是地址。
luozic
2019-04-28 10:25:35 +08:00
指针概念不难,但是你 Y 寫的程序怎麽保證在各種垃圾 CPU/内存上跑起來很難。安全+高性能才有用。
jziwenchen
2019-04-28 10:45:30 +08:00
楼上说不难的 甚至自学 PHP 说指针不难的是应该没有真正在生产上写过 C 吧?

像野指针 内存溢出 内存对齐 是不是都和操作指针有关呢?
jziwenchen
2019-04-28 10:46:26 +08:00
@dazhangpan 感谢. 你说了一些本质 有具体的错误使用示范吗
imbushuo
2019-04-28 10:51:28 +08:00
先去理解 load/store 或者 register/memory 两个模型后你会发现指针挺简单的(
wutiantong
2019-04-28 10:55:05 +08:00
@jziwenchen 我打个不恰当的比方,那些在生产环境上搞出 rm -rf /* 的人会不会觉得 rm 是个很难掌握的东西呢?
newtype0092
2019-04-28 10:57:27 +08:00
一个简单的办法,不管简单还是复杂,所有声明指针变量的地方不要直接用*,要用到的指针类型全部 typedef 的清清楚楚,这样一眼就看懂了。
tiedan
2019-04-28 11:15:31 +08:00
想起了 nginx 的四级指针。。

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

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

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

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

© 2021 V2EX