《c primer plus》阅读笔记

/*———————图片是高一下学期读完后写的总结———————*/

第一章 概览

这里写图片描述

第二章 C语言概述
这里写图片描述

第三章 数据和C
这里写图片描述

补充:
1.一般的,int类型存储在计算机的一个字中。
2.数字的前缀0表示八进制数,前缀0x或0X表示十六进制数。
3.八进制和十六进制的格式说明符分别为%o和%x(X),若要显示前缀,则为%#o和%#x(X)。
4.一般的,short16位,long32位,
int为32位,范围-(2^31)~+(2^31-1),即-2147483648 ~ 2147483647,极限约2.1*10^9
unsigned范围0 ~ (2^32-1),即0~4294967295,约4.2*10^9
long long为64位,范围-(2^63) ~ (2^63-1),即-9223372036854775808~9223372036854775807,约9.2*10^18
unsigned long long 约1.8*10^19
5.整数常量一般被视为int,不够时用更大的类型存储,字符常量被视为int(4字节,存储时位char类型1字节),浮点常量被视为double。
6.如果希望一个较小的数不用int存储,在数后加后缀U或LL或ULL,大小写均可
7.在传递函数参数时c自动把short转换为int,float转换为double。
8.char类型实际存储的是整数。
9.转义序列需放在但或双引号之中,表示八或十六进制时只读\后的3位,八进制的0可省略,即\0oo,\ooo,\xhh。
10.c规定,float类型至少能表示6位有效数字,即至少能表示33.3333333的前6位,取值范围至少为10^-37 ~ 10^+37。
11.一般的,float32位,double(双精度)64位。
12.sizeof()返回值为无符号整数。

问题:
1.为什么sizeof(‘a’)=1,而sizeof(‘ab’)=4
2.float/double和long double的%f和%Lf不能混用,任何情况,因为存储格式不同。
而整数就不是,编译器知道存储的右位置以及分配的内存大小,故低级的用高级的格式说明符没问题,高级的用低级的会截取右若干位。当然,有无符号的最高位情况也不同,不可混用。
但出现的例外情况,也就是说上面的理解是错误的。比如char ch=128,而d和lld输出不同。
那么究竟是怎么回事?如何理解?

第四章 字符串与格式化输入/输出

这里写图片描述
补充:
1.sizeof()若为字符串,返回整个数组的大小。
2.int a= 3e12是不好的形式,e-表示法为浮点数,可能有误差,long long a= 3e18+3很可能损失掉3,这是因为浮点精度而非类型转换。
3.p80如果使用带有多个说明符的scanf语句,函数在第一个出错的地方停止读入。

问题:
1.p80scanf中加逗号。
2.p68%a,%g。
3.p42说在传递函数参数时short转int,是所有函数吗,p70说float只在printf等转,还有char是什么情况
4.p73 4.10
5.p75参数传递真的是这样吗,为什么long long ch=1,b=233;printf(“%d,%d”,ch,b);没问题呢

第五章 运算符、表达式和语句

这里写图片描述

补充:
1.趋零截尾发生在整数除法和浮点数强制类型转换为整数时。
2.在y=6*12+5*20中,两个乘法先算哪个与环境有关。

问题:p105类型转换。

第六章 C控制语句:循环
这里写图片描述

补充:
1.若浮点数要比较是否相等,应用fabs()函数和精度来比较。
2.负数,浮点数也为真。如bool a=-0.1;则a存储1。
3.while()内必须有书,而可以for(;;)。

第七章 C控制语句:分支与跳转

这里写图片描述

补充:
1.除了那些两个运算符共享一个操作数的情况以外,C通常不保证复杂表达式的哪个部分先被求值,但C保证逻辑表达式从左向右求值。比如(a>b && b>c && c>d)一定是先求a>b的值,再b>c,最后求c>d,之后假如是(1&&0||1),因为两个运算符共享一个操作数,而&&优先级较高,则先算1&&0。再次说明,先优先级,优先级相同考虑则结合规则,这建立在两个运算符共享同一个操作数的前提下,其他的情况除逻辑运算符外没有保证。

问题:
1.p159预处理器代替。

第八章 字符输入/输出和输入确认
这里写图片描述

第九章 函数
这里写图片描述
1.对于多源代码文件程序的编译,函数原型和常量必须每个源代码文件中都包含,因此用包含头文件来达到目的。
2.若输入是qwer 123,则scanf%*s的效果是读到space,放回输入缓冲区,此时若还有%c,则读入space。

第十章 数组和指针
这里写图片描述
这里写图片描述

补充:
1.程序运行时变量名并不存储,变量名是面向程序员的,在编译时变量名就变成相对内存地址了。
2.数组名是常量,若有int a[2];则不能a++,但可以使a[1]=8;,因为不是const int a[2]。
sizeof a为数组的大小,sizeof &a[0]也一样。
3.const声明只读变量,而非常量。
4.对指针+1的操作是使指针增加一个存储单元,相当于加上他所指向的对象的字节大小。
5.int a[]; a等价于&a[0]
int a[][]; a[0]等价于&a[0][0]。
6.函数原型或函数头中,int sum(int ar[],int n) 等价于 int sum(int * ar,int n)。
7.后缀a++,先使用后+1在函数传参也适用。
8.sizeof针对常量指针如数组名或常量字符串等是整个数组或字符串的大小。(???问题。是不是)
9.不同类型的指针不能比较大小。(why)
10.指针包含两个方面的内容,一是物理内存地址,二是数据类型(包括大小和存储方式)。
11.int a[2][4];a++和a[0]++不一样。
12.[]优先级高于,因此 int (*pz) [2]表示*pz指向int[2],即**pz是int,而int pz[2]表示指针数组。
13.pz[m][n]等价于((pz+m)+n)
14.pt[2][4],则*pt == pt[0]==&pt[0][0],相当于int[4]。ch[5],ch表示这个数组或这个数组第一个元素的地址,两者相当。
15.const指针不能赋给非const指针,反过来的话,只有一层间接运算可以,多层不可以。p270有些指针实例很好。

问题:
1.p261指针类型指派。
2.经过试验,double a;然后依次a++输出地址,发现依次+8,int依次+4,是否是普遍规律?
3.c程序指针能否修改其他程序的内存数据对象?
4.p274,276.

第十一章 字符串和字符串函数
这里写图片描述
补充:
1.32位机上指针变量占4字节,64位机上占8字节。
2.sizeof(地址)实际上为sizoeof(一个数字),根据其大小默认存储为int,unsigned int,long long等,来分配存储大小。
3.long long a;sizeof(a)==8.这里的a是标识符,标识占据的一片内存区域(地址+类型(大小))。long long a=0;long long *b=&a;sizeof(b)b起标识符作用,sizeof(*b)先算b,这个标识符对应存储内容为地址,*b为按照地址找到对应内存区域(包括地址+类型),值为longlong大小,0为longlong方式存储,而非“0”的大小。
4.char *a=”asdfg”;a[2]=’q’;printf(“%s”,a);为什么返回异常值且无输出而不报错?运行错误吗?why?
5.const int * const a;中第一个表示指针指向只读数据,不可通过指针修改值,第二个表示指针指向a,不可改指向别处。
6.scanf遇到文件尾返回EOF,不合适的输入返回0并跳过该条scanf语句。如int a;char b;scanf(“%d%c”,&a,&b);printf(“%c”,b);输入w,不输出,而把scanf语句拆成两句则正常输出w。
7.gets()遇到换行符停止从缓冲区读入内存某地址,不存储换行符。遇到文件尾返回NULL,若键盘输入直接键入换行符,正常返回参数地址。
8.fgets()第二个参数为n,则最多读入n-1个字符(包括‘\n’,因为存储),剩下一个存储‘\0’。返回同gets()。p291.
9.puts()自动添加换行符,fputs()不。
10.常用字符串函数:strlen(),strcat(),strncat()即使后一个数组参数过长超过限制也自动添加空字符,strcmp(),strncmp(),strcpy(),strncpy()如果源字符串超过限制则不自动添加空字符,strchr(),strrchr(),strstr(),strpbrk()
11.空字符是‘\0’,而空白字符是空格换行制表。

问题:
1.p287对于补充5的解释。
2.为什么unsigned int a;scanf(“%u”,&a);printf(“%d”,a);可以正常。貌似?

第十二章 存储类、链接和内存管理
这里写图片描述
这里写图片描述
这里写图片描述

问题:
1.多文件时,文件1声明外部变量,然后在文件2中的某一代码块中用extern声明同一变量,那么在文件2中该变量是代码块作用域还是文件作用域?若文件2所有代码块之外声明同一变量不用extern,是不是屏蔽了外部链接的这个变量?


**———————————说明:此章还剩随机数 、内存分配和类型限定词未读—————————————

/*****************半途而废了,这是第四次读这本书,前三次是高一下学期读的,这次感觉不在状态,读了也立马就忘,上了大学再学吧,后面的直接传上来当时的总结。先搞算法Algorithm去了。**************/**

第十三章 文件输入/输出
这里写图片描述

第十四章 结构和其他数据形式
第十五章 位操作
第十六章 C预处理器和C库
第十七章 高级数据表示
这里写图片描述

———————-未完待更—————————-

猜你喜欢

转载自blog.csdn.net/Wen_Yongqi/article/details/81054519