从 Java 转到 C, 求推荐书.

2016-12-08 02:42:20 +08:00
 v9ox
场景:

有个字符串 a="abc*def", 我想搞出"abc"

之前用 java:
String s2= s1.substring(0, s1.indexOf('*'));

今天用 C:
先 Google 了如何 malloc() 然后看了如何用 strchr 之后又看了如何 memset memcpy
折腾了半小时 所以决定平时下班了找本书看看

需求:

1. 英文最好, 中文次之. (看了中文的以后和同事交流还得自己想怎么翻译 保留字 /宏 这些词)
2. 最好能有 C 和 Java 的比较, 或者能指出 C 不同于 Java 的地方
3. C 的基础语法即可, 不需要搞什么多线程 /网络编程 /GUI 之类的
4. 大一学的 C, 大二学的 java, 之后基本都用的 java, c 的那些 strlen(), sizeof(), sizeof(char *), sizeof(char) 都忘了, 只知道有这么个东西, 但是脑子里没了例子, 也不知道怎么用了.


Thx
2246 次点击
所在节点    问与答
17 条回复
Lonely
2016-12-08 03:46:53 +08:00
1 、 memcpy 不行吗,为何折腾了半小时?
2 、书的话可以看 C 语言入门经典或者 C Primer Plus 。
3 、你们都是用英文交流的吗?
v9ox
2016-12-08 04:11:36 +08:00
@Lonely

1. 行 但是我只知道有 memcpy 这么个东西 并不知道怎么用. 而且涉及到指针 char* 之类的, 确实纠结了一会. (往大项目上加功能, 编译一次就要 10 分钟). while(pos<strlen(char*)) 的时候提示 int 不能和 unsigned int 比较, 又耽误了 10 分钟...
2. 我大一的时候看过<C 语言程序设计现代方法>, 很不错. 但是这种厚书更适合零基础, 没法短平快啊, 我想找个小册子之类的赶紧上手.
3. 我在美国工作, 有时候想说一个定义个宏, 结果'宏' 不会说. 只能说 use the sharp define , 很尴尬.
DreaMQ
2016-12-08 08:19:39 +08:00
v9ox
2016-12-08 08:38:12 +08:00
@DreaMQ 这个治标不治本啊 几万行的 c 各种指针 /结构体 /星号 /宏定义 /goto 看着头大 肯定得找个书学一下 光是一个 indexof 的话 图简单 写个 while 循环判等就可以了
coldear
2016-12-08 08:52:18 +08:00
kevinzhwl
2016-12-08 09:30:49 +08:00
这个需求大学教材就可以。
多说一句,为啥不用 c++,不用 stl 呢?
stl :: string 也就是一行代码
sorra
2016-12-08 11:01:23 +08:00
你似乎需要 manual
skydiver
2016-12-08 11:19:04 +08:00
为啥不用 c++,不用 stl 呢?
就算写 C 也是很简单的事…大不了手动复制字符
jiumingmao
2016-12-08 11:20:47 +08:00
Mirana
2016-12-08 11:27:01 +08:00
函数用 man 都能查到
deeporist
2016-12-08 12:00:01 +08:00
C 基础的问题 字符串就是字符数组 C 和 java 的区别看是什么方面 语法区别还是汇编区别(C 没有运行时和虚拟机 java 的字节码和 C 的 obj 确实不一样 java 有一套自己的指令) 快速入门的话 tcpl 内容全码一遍 之后平时带着看 C 标准(ISO/IEC 9899:201x)和 C 标准库(the standard C library)应该就足够了 这三本看英文当然最好 觉得那么倾向 java 的话还是更推荐 C++
HGladIator
2016-12-08 12:06:49 +08:00
为何 java 转 c?
我刚好反向
qwer1234asdf
2016-12-08 12:23:52 +08:00
搜下 linux kernel 的 container_of ,再对比下高级语言所谓的反射....
lsmgeb89
2016-12-08 13:32:30 +08:00
书的话,基本随便一本 C 讲语法的书就可以,你需要顺着书大致过一遍,你有编程基础,应该很快,重点看看例子和指针,因为 Java 没有,然后你就能想起来了。
lsmgeb89
2016-12-08 13:43:38 +08:00
书的话,如果是经典 C ,那么就看 C 语言之父的写的这本:

https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628

Modern C 可以看看前两天版主推荐的这本:

http://icube-icps.unistra.fr/img_auth.php/d/db/ModernC.pdf

如果是 C++ 的话, list 就长了,入门:

https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/0321714113

https://www.amazon.com/C-Programming-Language-4th/dp/0321563840
v9ox
2016-12-08 14:32:57 +08:00
@HGladIator 因为我所在的组所有代码都是纯 C
然后我在的组早 10 晚 6 老板不催活, 我也不想挪窝了.


@lsmgeb89
@jiumingmao
@coldear
感谢推荐


@qwer1234asdf
@deeporist
内部机制对我来说太过高级 是 senior 们干的活了 我一个普通 software engineer 能在框架上写函数实现功能就够了
我前期的程序还是 java/python 混着写的 最近才把代码都改成 C 的 需要的就是基本语法



@Mirana
@sorra
面向搜索引擎编程确实快 但是如果没基础 查过之后也就忘了 以后还得做无用功)
lxgeek
2016-12-08 15:38:47 +08:00
C 和指针

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

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

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

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

© 2021 V2EX