从 Java 转到 C, 求推荐书. - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
v9ox
V2EX    问与答

从 Java 转到 C, 求推荐书.

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

    有个字符串 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    Solana     966 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 22:37 PVG 06:37 LAX 14:37 JFK 17:37
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86