发现写learn python the hard way的大神Zed.A.Shaw的the hard其实是一个系列,除了python还有Ruby、C、SQL、Regex,都是我想学的有木有!这几天在看他的C的教程,虽然只是一个alpha版本,但已经很牛逼了啊,一开始还可以,现在光是消化一小节都要好几天好不好!看了他的教程,感觉自己以前学过的那点东西真的是连屎都不如。。anyway,学到了很多东东,记录下学到的东西。

  • 指针。发现在实际使用中很容易把指针变量和指针所指的内容搞混,要记住,指针变量里存放的只是一个地址而已,所以它的大小(位数)是固定的,应该是4个字节,跟它所指的内容没有一点关系。比如我在练习中遇到的一个问题是,有一个结构体,结构体有几个字符型指针,也就是说这几个指针是指向几个字符串的,然后在给这个结构体申请空间的时候我就晕了。。到底应该申请多少呢?直接malloc(sizeof(struct Address))吗?因为我总纠结着结构体里的字符型指针,想着这几个指针指向的字符数目又没有定,这可怎么办呢?其实是我想多了,把指针和它指向的内容混淆了,要知道,指针就是指针而已,大小固定,4个字节,所以上面那个结构体的大小是固定的,可以直接用sizeof来计算。至于那几个指针指向的字符串嘛,等要用的时候再malloc就可以了,也就是说它们跟上面说的结构体没半毛钱关系!只是因为里面有个指针指向了它们而已。
  • 内存管理。这个之前真的是没有想过,也没有遇到过。因为总是在用一些脚本语言,根本就没有关注过内存管理的问题,导致现在遇到都不知道该怎么处理了,现在通过一次练习,对内存管理有了一些理解了。基本上,在C中一切内存管理都要自己来,要放东西的时候就要自己malloc申请空间,不需要提前申请,只要在需要使用的时候申请就行了,然后记得申请的空间用完后要自己释放,否则会导致内存泄露!
  • 动态数据结构从文件的读取和写入。乍一想觉得挺简单,其实还是蛮复杂的好不好。。先说写入,这里说的动态结构是指用指针实现的,就是不是固定的数组,所以具体大小可以到时候malloc随意申请,灵活是灵活,但要写入文件的时候就SB了,不能像固定结构那样直接一个fwrite(&addr, sizeof(struct Addr), 1, fpr)就行了好不好,你要自己找到指针指向的内容,然后一个一个自己写啊!再说读取,首先顺序要一致,怎么写入的就要怎么读取出来,否则肯定是没戏啊,然后读取的时候要先准备好地方啊!也就是说要为读入的数据用malloc提前申请空间啊!还有一个就是一次读入数据大小的问题,这个要好好弄清楚,我在练习的时候就是这个没弄清楚,导致程序一直都有问题,还是那句话,不要把指针和指针指向的内容混淆!!
  • gdb。gdb是个神器!!