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

2019-04-27 21:59:56 +08:00
 jziwenchen
我是从 C# / JAVA 开始学的编程 . 能从具体实例问题出发解释为何指针这么难吗?
10708 次点击
所在节点    C
89 条回复
jianghu52
2019-04-28 11:18:50 +08:00
其实不是指针难,主要是楼主你学的 C# java 这种高级编程语言,把本来很复杂的编程语言给抽象的符合人类直观感觉了。所以当你学 C 的时候,指针会让你觉得很难。
从人类可以理解的代码,到 cpu 真正执行的指令,中间隔了很多东西。每一层都是一种新的语言。而相对于来说,C 语言本身更加关注内存,所以他有指针,还有垃圾回收。而 C#还有 java 本身的环境( freamwork,jvm )他们自身已经将内存操作以及垃圾回收都已经包含了,所以指针的概念就消失了。
这也就是为什么楼主你学习指针困难的原因。
至于要怎么学好指针,我个人推荐的方式是去理解编译原理,不要求你真的对于编译原理有多么高深的理解,只是希望你能在头脑中真的有一个关于内存的概念。

int a = 1
a = 2

以上两句 java 代码是不包含指针的,但是在内存中他们开始是什么样的,赋值之后又有了什么变化。如果你能很容易的回答出这几个问题,我觉得指针对你来说,应该就不会再觉得很难了。
DOLLOR
2019-04-28 11:34:48 +08:00
C 语言的指针难,可能是因为* &这两个符号带来的迷惑。
定义一个指针:
int *p = &i;
使用指针的时候:
*p = i;

在这里,两个*p 的含义是完全不一样的,这对新手来说,会造成很大的困扰。
Cukuyo
2019-04-28 11:39:44 +08:00
听说 nginx 之所以快是因为里面用的四级指针来着
fromdark
2019-04-28 11:58:28 +08:00
指针本身并不难,之所以难是因为大部分学校的老师教的很烂,教材也用的很烂(比如某谭),基本上 C 的学习都是应试驱动,考题也考一些乱七八糟的东西。选择一本好书,指针并不难。
qqor
2019-04-28 12:25:33 +08:00
一群人曾经谩骂 c++高手指针乱指的问题,看来到现在这问题还没解决
dingyaguang117
2019-04-28 12:26:02 +08:00
指针不难,难的是内存管理
q397064399
2019-04-28 13:08:55 +08:00
因为你没学汇编语言,C 语言说的好听的就是高级一点点的汇编语言,本身只在汇编上面包装了一点点东西而已
chitanda
2019-04-28 13:28:51 +08:00
不难吧。有指针可以做到很多优化。比如 Python 合并两有序列表,用 iter 不能退回到上一个,指针直接--就行了
littlewing
2019-04-28 13:30:58 +08:00
先学计算机组成原理,再学汇编,然后学 C 你就会觉得很简单了
q397064399
2019-04-28 13:59:49 +08:00
C 语言 = 汇编语言 ,, 两者一定要同时一起学
Cloutain
2019-04-28 15:05:37 +08:00
完全称不上难,搞清楚各种内存布局和操作系统的内存管理才叫难。脚本语言一样,脚本语言从某种程度上实现近似指针的功能就和汇编语言没有多大的区别了。
jackmod
2019-04-28 15:21:33 +08:00
C 语言不是一门语言,而是它背后的一整套体系。建议阅读 CSAPP。
salamanderMH
2019-04-28 15:43:10 +08:00
C 语法不难吧
myself659
2019-04-28 17:03:44 +08:00
加一层原理 indirect 了解一下
phoolean
2019-04-28 18:16:43 +08:00
你应该说一下这个“难”指的是概念上难以理解还是使用时难以操作?
如果是概念上难以理解,可能是因为计算机原理没学好;
如果是使用时难以操作,可能是因为写的代码少了不够熟练。
kahohuru
2019-04-28 18:50:12 +08:00
是挺难的,当年写个植物大战僵尸的外挂就用到了指针
dfjslkjdf
2019-04-28 19:45:06 +08:00
是不是因为容易出错?
wtdd
2019-04-28 20:04:40 +08:00
指针的本意很容易理解,难的是那些操作以及符号,设计的比较奇怪
fghjghf
2019-04-28 21:24:58 +08:00
完全因为你没了解指针而已。你了解透了,会觉得 C 很简单。CPP 的语法才是最烦人的。面向对象、过程、范型,
ixiaohei
2019-04-29 00:53:08 +08:00
@smdbh unsafe 黑科技啊

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

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

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

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

© 2021 V2EX