V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
v9ox
V2EX  ›  问与答

从 Java 转到 C, 求推荐书.

  •  
  •   v9ox · 2016-12-08 02:42:20 +08:00 · 2420 次点击
    这是一个创建于 2941 天前的主题,其中的信息可能已经有所发展或是发生改变。
    场景:

    有个字符串 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
    第 1 条附言  ·  2016-12-08 14:26:43 +08:00
    感谢大家 已经决定找本 C 基础的书顺着看了

    1. 为啥不 c++?为啥不 stl?
    因为公司服务器上的所有代码均为 C
    2. 为啥不查 manual, 不用 man?
    头痛医头, 脚痛医脚, 其实这样效率更低.
    3. 为啥 Java 要转 C?
    研究生阶段入了理论的坑, Java 也是半年前捡起来的, 所以我没有语言偏好, 用哪个对我都一样.
    17 条回复    2016-12-08 15:38:47 +08:00
    Lonely
        1
    Lonely  
       2016-12-08 03:46:53 +08:00
    1 、 memcpy 不行吗,为何折腾了半小时?
    2 、书的话可以看 C 语言入门经典或者 C Primer Plus 。
    3 、你们都是用英文交流的吗?
    v9ox
        2
    v9ox  
    OP
       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
        3
    DreaMQ  
       2016-12-08 08:19:39 +08:00 via iPhone
    v9ox
        4
    v9ox  
    OP
       2016-12-08 08:38:12 +08:00
    @DreaMQ 这个治标不治本啊 几万行的 c 各种指针 /结构体 /星号 /宏定义 /goto 看着头大 肯定得找个书学一下 光是一个 indexof 的话 图简单 写个 while 循环判等就可以了
    coldear
        5
    coldear  
       2016-12-08 08:52:18 +08:00
    kevinzhwl
        6
    kevinzhwl  
       2016-12-08 09:30:49 +08:00 via iPhone
    这个需求大学教材就可以。
    多说一句,为啥不用 c++,不用 stl 呢?
    stl :: string 也就是一行代码
    sorra
        7
    sorra  
       2016-12-08 11:01:23 +08:00
    你似乎需要 manual
    skydiver
        8
    skydiver  
       2016-12-08 11:19:04 +08:00 via Android
    为啥不用 c++,不用 stl 呢?
    就算写 C 也是很简单的事…大不了手动复制字符
    Mirana
        10
    Mirana  
       2016-12-08 11:27:01 +08:00
    函数用 man 都能查到
    deeporist
        11
    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
        12
    HGladIator  
       2016-12-08 12:06:49 +08:00 via iPhone
    为何 java 转 c?
    我刚好反向
    qwer1234asdf
        13
    qwer1234asdf  
       2016-12-08 12:23:52 +08:00 via iPhone
    搜下 linux kernel 的 container_of ,再对比下高级语言所谓的反射....
    lsmgeb89
        14
    lsmgeb89  
       2016-12-08 13:32:30 +08:00 via Android
    书的话,基本随便一本 C 讲语法的书就可以,你需要顺着书大致过一遍,你有编程基础,应该很快,重点看看例子和指针,因为 Java 没有,然后你就能想起来了。
    lsmgeb89
        15
    lsmgeb89  
       2016-12-08 13:43:38 +08:00   ❤️ 1
    书的话,如果是经典 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
        16
    v9ox  
    OP
       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
        17
    lxgeek  
       2016-12-08 15:38:47 +08:00
    C 和指针
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1069 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:21 · PVG 03:21 · LAX 11:21 · JFK 14:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.