《C 语言深度解剖》 学习笔记

0

[C语言深度解剖].陈正冲著.石虎审.pdf 2015年3月22日 18:58 阅读记录:第 1 遍,第 20 页, 共 131 页

  1. “我个人一致认为,普通人用C语言在3年之下,一般来说,还没掌握C语言;5年之下,一般来说还 没熟悉C语言;10年之下,谈不上精通。” – 陈正冲

  2. “我告诉学生:听明白,看明白不代表你懂了,你懂了不代表你会用了,你会用了不代表你能用明 白,你能用明白不代表你真正懂了!什么时候表明你真正懂了呢?你站在我这来,把问题给下面的 同学讲明白,学生都听 明白了,说明你真正懂了。否则,你就没真正懂,这是检验懂没懂的唯一标 准。” – 陈正冲

  3. C语言参考书: 《The C Programming Language》– Kernighan & Ritchie 《Expert C Programming》– Linden 《C Traps and Pitfalls》 – Andrew & Koening 《Write Clean Code》 – Steve Maguire 《Code Complete Second Edition》 《高质量C++/C编程指南》 – 林锐

  4. 电影是门遗憾的艺术。 C语言包含的数据类型:

C 关键字

  1. C语言中一共32个关键字,sizeof 不是函数而是关键字。

  2. 什么是定义?什么是声明(两重含义)? – page11 定义和声明最重要的区别:定义创建了对象并为这个对象分配了内存,声明 没分配内存。

  3. auto – 最宽宏大量的关键字 – 编译器在默认的缺省情况下,所有变量都是auto的。 register – 最快的关键字 – 它请求编译器“尽可能”的将变量存在CPU的内部寄存器中,而不是通过内存寻址访问以提高效 率。

  4. 寄存器:实质是一块块小的存储空间,不过其存取速度要比内存快得多(离CPU近),不需要像内存一样通过 寻址 来 存取数据。CPU不直接和内存打交道,而是通过寄存器中转数据。不同的CPU拥有的寄存器数量不一样。

  5. 使用 register 修饰符的限制:register变量必须是能被CPU寄存器所接受的类型。即register变量必须是一个单个的值, 并且其长度应小于等于整型的长度。由于register变量可能不存放在内存中,所以不能用取址运算符&来获取register变 量的地址。

  6. static – 最名不符实的关键字 – 在C语言中主要有2个作用:– (C++中有扩展) 修饰变量 – 参见”static关键字作用之修饰变量.cpp” 修饰函数 – 函数前加static使得函数成为静态函数,但此处”static”的含义不是指存储方式,而是指对函数的作用域 仅限于本文件(所以又称内部函数)

【代码:static关键字作用之修饰变量.cpp】

# include <stdio.h>
static int j; /* 静态全局变量,作用域仅限于变量定义的文件中(定义之初开始,文件结尾结束),其他文件即使 用extern声明也无法使用它(同一文件中,在该静态变量定义之前的函数要使用它必须在其前面加入extern声明, 同一文件下最好顶端就定义,方便使用) */
void fun_1(void)
{
j=0;
j++;
printf("\t\tj=\t%d\n",j); }
void fun_2(void){
static int j=0; /* 静态局部变量,只能在定义所在的函数体内使用,同一文件下的其它函数也使用不了。
由于static修饰的变量都存在于内存的静态区,所以即使函数运行结束后,这 个变量
内的值也不会被销毁,函数下次使用时仍能用到这个值 */
j++;
printf("i=\t%d\n",j); /* 这里也定义变量为j也不会报错,这就是使用内部函数的好处 -- 不用担心自己定义的 变量与其他函数、其他文件定义的变量出现同名问题 */
}
int main(void){
for(int k=0; k<10; k++){ fun_1();
fun_2(); }
return 0; }
/* 在VC++6.0中的显示结果为:
j= 1 i= 1
j= 1 i= 2
j= 1 i= 3
j= 1 i= 4
j= 1 i= 5
j= 1 i= 6
j= 1 i= 7
   j= 1
 i= 8
j= 1
i= 9
j= 1
i= 10
Press any key to continue
*/
  1. 一般在32位的系统中,常见的数据类型占用的内存空间分别是: char – 1byte short – 2byte int – 4byte long – 4byte float – 4byte double – 8byte(具体平台可以用sizeof关键字测试一 下)

  2. sizeof – 最冤枉的关键字 – 经常被误解为函数名 – 判断他不是函数的例子(32位): int i=0; 1)sizeof(int); 2)sizeof(i); 3)sizeof int; 4)sizeof i; 从4)的值为4可以看出sizeof不是函数,因为函数名字后面一定要有括号。sizeof后面跟变量名时可以没有括号,但是跟 类型时一定要有括号。为确保万无一失,sizeof后面最好都加括号。

本文最后修改时间: 2015-03-28 17:02:44 +0000 (完) CC BY-NC-ND 3.0

若您发现文章中的错误,并愿告知于我,或想与我交流,我的联系方式在: Contacts


上一篇 Windows 高级操作:DOS、CMD、批处理和注册表

All The Best

下一篇 计算机专业术语及其英文表达