一本很好的C入门教材

Josan
https://book.douban.com/subject/26792521/

20170810
花了一整天的时间,强行把这本书过了第二遍。平均1小时/100页

笔记部分
--------------
1-100页,主要看看scanf(),printf()的转换说明,以及修饰符
笔记:
连接的时候是 目标代码、库代码+启动代码
UNIX系统的文件名区分大小写,因此.c 与.C是不同的
0xa.1fp10(其中10是十进制), 相当于 0xa.1f * 2^10
UCN Universal Character Name 通用字符名

101-300页,这段快速的过,主要CH08
运算时,类型自动提升 char/short--->int float--->double
理解缓冲的概念,了解无缓冲(_IONBF), 行缓冲(scanf()默认这种缓冲, _IOLBF),
完全缓冲(_IOFBF) 常见缓冲大小512B, 4KB
标准流 stdin 键盘输入 stdout 屏幕
文件重定向 prog <in.txt >out.txt

指定初始化器
int arr[3] = {[2]=212}; //int arr[3]={0, 0, 212}
int arr[] = {[2]=12, 3}; //int arr[4]={0, 0, 212, 3}
尾递归 即将递归至于f()的末尾,正好在return语句之前 显示全文
https://book.douban.com/subject/26792521/

20170810
花了一整天的时间,强行把这本书过了第二遍。平均1小时/100页

笔记部分
--------------
1-100页,主要看看scanf(),printf()的转换说明,以及修饰符
笔记:
连接的时候是 目标代码、库代码+启动代码
UNIX系统的文件名区分大小写,因此.c 与.C是不同的
0xa.1fp10(其中10是十进制), 相当于 0xa.1f * 2^10
UCN Universal Character Name 通用字符名

101-300页,这段快速的过,主要CH08
运算时,类型自动提升 char/short--->int float--->double
理解缓冲的概念,了解无缓冲(_IONBF), 行缓冲(scanf()默认这种缓冲, _IOLBF),
完全缓冲(_IOFBF) 常见缓冲大小512B, 4KB
标准流 stdin 键盘输入 stdout 屏幕
文件重定向 prog <in.txt >out.txt

指定初始化器
int arr[3] = {[2]=212}; //int arr[3]={0, 0, 212}
int arr[] = {[2]=12, 3}; //int arr[4]={0, 0, 212, 3}
尾递归 即将递归至于f()的末尾,正好在return语句之前
```
int f(int n)
{
       int ans;
       if(n > 0)
       {
              ans = n*f(n - 1);
       }
       else
       {
              ans = 1;
       }
       return ans;
}
```
301-400页
对这几个函数,最好还是去官方文档,查看解释
gets(str) //遇\n转\0 输入缓冲的\n丢弃
gets_s(str, len) //至多读入len-1字符,如果继续读入字符,就报错
puts(str) //遇\0转\n

fgets(str, len, fp) //fgets至多读入len-1个字符;读入'\n',停止读入,'\n'也读入到str,并加入'\0',结束读入
fputs(str, fp) //str是什么就输出什么到fp

scanf()
printf()

fscanf(fp, scanf())
fprintf(fp, printf())

gets_s(str, len)

strncat(a, b, len) //最多len个字符,然后加'\0';

strchr()
strrchr() //r是reverse的意思,就是从反方向搜索

存储类别说明符6个 static extern auto register _Thread_local typedef
ANSI C 类型限定符(4个) const(恒常性) volatile(易变性) restrict _Atomic
const const == const (幂等性)

void* memcpy(void* restrict s1, const void* restrict s2, size_t n);
void* memmove(void* s1, const void* s2, size_t n);

动态分配二维数组
int (*p)[6] = (int(*)[6])malloc(n*6*sizeof(int));

401-500
主要看文件CH13
文件的打开方式区分,文本模式 \r\n转为\n流;二进制模式 \r\n不转变
随机访问的部分还是似懂非懂,主要是需求不高。下次,再攻克
结构体的伸缩型数组成员比较新颖, 只能末尾,并且[]
位操作,注意位字段与按位运算的区别
5种用法
掩码&,打开位|, 关闭位&~, 切换位^, 检查位&mask ==mask

500-EOF
CH16好好看看
P515 对齐 需再看

_Alignof(float) Align(v. 对齐,排成一行) + of
_Alignas(16) Align + as(signment)

预处理不是编译的第一步,在这之前还有几个细节处理 P521-522

CH17基础薄弱的,自己一定码代码一遍,很好的程序


评价部分
----------
这本书每次看完都感觉很有收获。自己是从《C++ Primer Plus》转过来的,在编程中,偶尔会看到assert(), sprintf(), qsort() strtok()一些关于C的函数,断断续续的学习,感觉很乱,很慢。索性买了一本《C Primer Plus》。还是很喜欢,Prata的写作风格的。每个例子都很详细,解释也很清楚。刚开始学得新手,建议将书中的代码都敲一遍,绝对不亏。

这是我目前认为的最好的C语言教材,没有之一。

----------
哈哈,写个笔记居然花了1小时,不过这个时间是值得的
0
0

查看更多豆瓣高分好书

回应(0)

添加回应

推荐C Primer Plus(第6版)(中文版)的豆列

了解更多图书信息

值得一读

    豆瓣
    我们的精神角落
    免费下载 iOS / Android 版客户端