1
用单引号括起的字符实际代表一个整数,整数值对应于该字符在编译器中采用的字符集对应的序列值;
双引号括起的字符串,代表的是一个指向无名数组起始字符的指针,该数组被双引号之间的字符和‘\0’初始化。
对于'yes'这种形式的表示,不同的编译器采取的方式不同,但大都理解为"一个整数值,由y e s 所代表的整数值按照特定编译器实现定义的方式组合得到",vc采用用后一个字符覆盖前一个字符,最后得到的是最后一个字符的值

2
词法分析中的"贪心法则"----每一个符号应该包含尽可能多的字符,
所以n-->0的含义是 n-- >0,而不是n- ->0;

3
注意分号结束的标志可能会引起错误,比如定义了
struct log{ int date; int time}若没有分号 则struct会被编译器认为是主函数返回类型
main(){}

使用case分支语句时若没有用 break就要注释出来,防止被误认为写错;
4
c语言的数组需要注意的两点:
1----c语言只有一维数组,而且数组的大小在编译期间就作为一个常数而存在,但是数组中的元素可以是任何对象,所以可以仿真出一个多维数组;
2----通过数组可以获得指向下标为0 的元素的指针,有关数组的其他操作看上去是下标运算,其实是指针运算,因此可以根据指针的行为来确定下标的行为
如*(a+i)即为下标为i的元素的引用,这种写法如此常用,因此被简记为a[i];

数组作为参数毫无意义,因此c将自动地将作为参数的数组声明转换成相应的指针声明
int strlen(int a[])
int strlen(int *a)等价

main(int argc, char *argv[])强调argv指向某数组的起始元素的指针,数组的元素为字符指针类型
main(int argc, char **argv)等价
我们需要记住的是,复制指针并不同时复制指针所指向的数据。

5
为main函数提供返回值,默认的是int,一般情况下系统会根据返回值来判断程序是否执行成功,0代表执行成功;

若函数仅被文件内的其他函数调用就可以声明为static,因为它对外部是不可见的

6
库函数setbuf(stdout,buf)
程序输出有两种形式,一种是即时输出,会造成较高的系统负担,另一种是先暂存起来,然后大块写入的方式,通过setbuf控制在实际 的写之前控制产生数据的量
输出库的stdout----buf缓冲区---实际写入到stdout
main()
{
int c;
char buf[BUFSIZ];
setbuf(stdout,buf);
while((c=getchar())!=EOF)
putchar(c);
}
问题是buf被清空是在main结束之后,实际在此之前buf已经被释放;
解决方法1---在main外面声明static char buf[BUFSIZ];
动态分配缓冲区,在程序中不主动去释放分配的缓冲区,所以在main函数结束时并不会释放缓冲区,
char  *malloc();
setbuf(stdout, malloc(BUFSIZ));

ANSI c标准 ----C99最新的c语言标准

处理64位数据可以用C99标准的long long来表示
typedef和#define有什么区别?
一般来说最好使用typedef,能够正确处理指针类型,
#define的优点是可以使用#ifdef来处理头文件的重复包含;
另外不能在定义typedef之前使用它;
函数调用只能出现在局部非静态变量中;

C陷阱与缺陷的学习笔记的更多相关文章

  1. 《C陷阱与缺陷》学习笔记(一)

    前言和导读 "得心应手的工具在初学时的困难程度往往超过那些easy上手的工具."比較认同这句话. 我至今认为自己事实上还是个刚入了门的刚開始学习的人. 第一章 "词法&q ...

  2. 《C陷阱与缺陷》阅读笔记(个人版)

    笔记: 第一章:词法陷阱 提倡显示比较if((x = y) != 0) foo(); 第二章:语法陷阱 已知一个类型的声明 该类型的类型转换:吧声明中的变量名和声明末尾的分号去掉,再将剩余的部分用括号 ...

  3. 《C陷阱与缺陷》读书笔记

    1. 词法“陷阱” = 不同于 == , 可以通过if( 1 == a )来避免 & | 不同于 && || 词法分析中的“贪心法” 编译器将程序分解成符号的方法是,从左到右一 ...

  4. 我的《C陷阱与缺陷》读书笔记

    第一章 词法“陷阱” 1. =不同于== if(x = y) break; 实际上是将y赋给x,再检查x是否为0. 如果真的是这样预期,那么应该改为: if((x = y) != 0) break; ...

  5. 读书笔记--C陷阱与缺陷(七)

    第七章 1.null指针并不指向任何对象,所以只用于赋值和比较运算,其他使用目的都是非法的. 误用null指针的后果是未定义的,根据编译器各异. 有的编译器对内存位置0只读,有的可读写. 书中给出了一 ...

  6. 【转】C缺陷和陷阱学习笔记

    http://www.cnblogs.com/hbiner/p/3591335.html?utm_source=tuicool&utm_medium=referral 这段时间把<C陷阱 ...

  7. C陷阱和缺陷学习笔记

    这段时间把<C陷阱和缺陷>看了,没时间自己写总结.就转一下别人的学习笔记吧http://bbs.chinaunix.net/thread-749888-1-1.html Chapter 1 ...

  8. 读书笔记--C陷阱与缺陷(一)

    要参与C语言项目,于是作者只好重拾C语言(之前都是C++,还是C++方便). 看到大家都推荐看看  C陷阱与缺陷(C traps and pitfalls),于是好奇的开始了这本书的读书之旅. 决定将 ...

  9. C语言学习书籍推荐《C陷阱与缺陷》下载

    下载地址:点我 凯尼格 (作者), 高巍 (译者) <C和C++经典著作:C陷阱与缺陷>适合有一定经验的C程序员阅读学习,即便你是C编程高手,<C和C++经典著作:C陷阱与缺陷> ...

随机推荐

  1. (转)Content-Disposition的使用和注意事项

    最近不少Web技术圈内的朋友在讨论协议方面的事情,有的说web开发者应该熟悉web相关的协议,有的则说不用很了解.个人认为这要分层次来看待这个问 题,对于一个新手或者刚入门的web开发人员而言,研究协 ...

  2. java 关于操作Collection的一点说明

    java 中有一个工具类 Collections 其中的一个方法 static <T> boolean replaceAll(List<T> list, T oldVal, T ...

  3. 线代: N阶行列式

    线性变换 将 (x, y) 变成 (2 x + y, x - 3 y) 就叫做线性变换, 这就是矩阵乘法, 用于表示一切线性变换. 几何上看, 把平面上的每个点 (x, y) 都变到 (2 x + y ...

  4. 关联更新SQL语句

    update F_A_Info  set level=b.level from  F_A_Info a,F_A_Info_QUAN b where a.id=b.id

  5. EasyUI 条件设置行背景颜色

    数据网格(datagrid)的 rowStyler 函数的设计目的是允许您自定义行样式. rowStyler 函数需要两个参数: rowIndex:行的索引,从 0 开始. rowData:该行相应的 ...

  6. 使用nginx生成缩略图

    nginx中可以使用 --with-http_image_filter_module 这个模块,今天发现在github上发现国人开发的一款模块 模块同时支持 Nginx 和 tengine 本ngin ...

  7. HDUOJ------1711Number Sequence

    Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  8. Java I/O 应用程序设计

    课程  Java面向对象程序设计 一.实验目的 掌握数据流的使用 二.实验环境 1.微型计算机一台 2.WINDOWS操作系统,Java SDK,Eclipse开发环境 三.实验内容 1.使用Scan ...

  9. 【LeetCode】137. Single Number II (3 solutions)

    Single Number II Given an array of integers, every element appears threetimes except for one. Find t ...

  10. PowerDesigner 的常用方法

    http://www.cnblogs.com/studyzy/archive/2008/01/23/1050194.html PowerDesigner 的常用方法 修改外键命名规则 选择Databa ...