本文是《C Primer Plus》第六章至第八章读书笔记,持续更新中。 ch06. C控制语句:循环 C语言支持哪些循环控制关键字 循环体中(里)变量的作用域 可以通过scanf函数控制循环 - 如果输入数据无法转换成指定类型的时候,scanf函数返回0 while循环部分要点:只有测试条件之后的单独语句(简单或者符合语句)才是循环部分 (一般编程习惯好的都不会出现这种情况,但是也得了解如果出现这种情况到底是因为什么。现代高级的IDE都会有相应的提醒) 1int n = 0; 2while (n < 3) 3 printf("n is %d\n", n); 4 n++; // 这里的n++已经不是循环体的一部 …
阅读更多本文是《C Primer Plus》第九章至第十一章读书笔记,持续更新中。 ch09. 函数 函数原型、函数定义和函数调用 函数的参数列表和返回值 形参和实参 函数类型 函数原型:任何程序在使用函数之前都要声明改函数的类型。在函数调用前需要声明函数原型。函数原型是告诉编译器函数的类型。对于较小的函数,也可以把函数定义放在主调函数之前,这时候的函数定义也就是函数声明 函数定义:提供函数的实际代码 声明带有参数的函数时,可以只给定参数的类型而不需要提供参数的名字,比如:void show_n_char(char, int); 函数参数 - 主调函数通过参数将值传递给被调函数 形式参数(formal argument) - 函数定义和声明 …
阅读更多本文是《C Primer Plus》第三章至第五章读书笔记。 ch03. 数据和C 思考问题: 各种类型的数据占用多少空间 各种类型的数据是如何格式化输出的 一般而言,存储int需要占用一个机器字长 C语言中的byte不是8个bit,而是和一个char占用的位长一样 char根据编译器不同,可能被处理成有符号也可能被处理成无符号。具体可以查看头文件limits.h 整数类型一般都被存储为int类型,当超过int最大范围,编译器会自动将其视为高一个等级的类型,直到越界 2^16 = 65536 / 2^8 = 256 浮点数的存储:有效数和指数部分(包括符号),3.16e^7,有效数部分就是3.16 float至少能表示6位有效数 …
阅读更多本文是《C Primer Plus》第十二章至第十四章读书笔记,持续更新中。 ch12. 存储类别、链接和内存管理 不同关键字修饰是否对应不同的存储类别 怎么管理内存,是否有对应的函数 标识符 - 一个名称(变量),用于指向内存中的特定对象。通过作用域和链接来描述标识符的可见性。 左值 - 指定内存对象的标识符或者表达式 可修改的左值 - 可以使用左值改变对象中的值 const char* pc = "Behold a string literral!" pc - 可以修改的左值,即pc可以指向别的地址 *pc - 不可修改的左值,*pc指向'B',不可修改 作用域 块作用域 - 花括号括起来的代码区域。以前块作 …
阅读更多本文是《C Primer Plus》第十五章至第十七章读书笔记,持续更新中。 ch15. 位操作 位操作运算符 不同进制的数据表示法 一般系统是使用8bit作为一个字节。C语言中定义的是char类型的位长作为一个字节的长度。C语言中可以通过宏CHAR_BIT获取char类型的位长 八进制 - 一个八进制位对应3个二进制位。例如八进制0377对应二进制000 011 111 111 十六进制 - 一个十六进制位对应4个二进制位。因此两个十六进制位恰好对应一个8位字节。例如:0xC2相当于二进制1100 0010 按位逻辑运算符号 二进制反码或按位取反 ~:按二进制位,把1变成0,把0变成1 按位与&:按二进制位,当运算位都是1 …
阅读更多ch06. C控制语句:循环 编写一个程序,提示用户输入大写字母。使用嵌套循环以下面金字塔型的格式打印字母: 1 A 2 ABA 3 ABCBA 4 ABCDCBA 5ABCDEDCBA 提示:用外层循环处理行,每行使用3个内层循环,分别处理空格、以升序打印字母、以降序打印字母。 思考:外层循环处理行容易实现,但是使用3个内层循环控制空格、升序字母和降序空格字母似乎有点多。这里可以结合条件判断,是的内层只需要一个循环搞定空格、升降序字母的打印。这里有几点比较关键 每行有多少个空格 每个一共要打印的字符是多少个,是包括每行的空格加上字符 每行都是对称的,要找到每行对称中心的字符 每行的空格数、字符数和对称中心的字符都是不一样的,这个要 …
阅读更多