C Primer Plus,5th Edition 复习(一)

书名 《C Primer Plus, 5th Edition

本书样例: http://www.samspublishing.com

第一章:
1、面向对象编程是一种哲学思想,它试图让语言适应问题,而不是让问题来适应语言。

2、定义程序目标->设计程序->编写代码->编译->运行程序->测试和调试程序->维护和修改程序。

3、应该养成在编写代码前先进行规划的习惯。使用古老而可敬的笔记技术略记下程序的目标,养成勾勒出设计概貌。

4、学习顺序:
    一种最直接的方式是先全部学完A,再去全部学习B...。通常这并不是学习一个主题的最佳顺序。
    例如您开始学习英语时首先学习所有的名词,则您表达思想的能力就会非常有限。不错,您可以指着某物并喊出其名字,但如果稍微学习一点名词、动词、形容词等等,并学习有关这几部分之间的关系的几条规则,那么您的表达能力就会大大提高。

5、许多IT类的书籍序言或第一章概述会含有下载本书例子源码的网址哦!

第二章:C语言概述

1、C语言的一个基本设计原则是避免不必要的成分。

 

第三章:数据和C
1、前缀OX或者ox表示十六进制值,前缀O(零)表示使用八进制。

2、显示整数——%O、%d、%x分别表示八、十、十六进制

3、使用%#o、%#x和%#X分别生成o、ox、OX前缀

4、C把一个字节(byte)定义为char类型使用的位(bit)数,所以这样的系统上,C文档中提到的一个字节是16位或32位,非8位。

5、C还有另外一个特殊的浮点值,NaN(Not a Number),如果asin()的输入参数大于1,则返回NaN

6、一些不会报告错误的错误
    %d显示float值,%f显示int值——显示垃圾值不报错

7、有些实现支持复数和虚数类型
   double_Complex float_Imaginary

 

第四章 字符串和格式化输入/输出
1、一般情况下,使用%s的scanf()只会把一个单词而不是整个语句作为字符串读入。

2、定义常量的三种方法:#define、const、 enum

3、limit.h中的一些符号常量 p66

4、转换说明符及作为结果的打印输出 p68

5、打印‘%’,可使用两个‘%’

6、printf()函数返回所打印的字符的个数,如果输出错误,则返回一个负数。

7、打印较长的字符串:1)分句(分多个printf) 2)\   3)“” “”

8、scanf()和printf()的‘*’修饰符
   scanf(): %*d跳过相应项目->scanf("%*d %*d %*d",&n);
   printf():事后由程序制定宽度->printf(“weight=%*.*f\n",width,pricision,weight);

9、sizeof(str)——str的字符数+1

10、scanf("%s",str);  //str是字符串的时候不用+‘&’

 

第五章:运算符\表达式和语句
1、7./4.=1.75    7./4=1.75

2、优先级
    增(减)量有很高的优先级,只有圆括号比它们的高,所以,x*y++ = (x)*(y++)

3、在包含两种数据类型的任何运算里,两个值都被转换成两种类型里较高的级别。
4、在混合类型的算术运算的情况下,较小的类型被转换成较大的类型。提升是一个平滑的无损害的过程,单数降级可能导致真正的问题。

5、不依赖于自动转换是一个很好的编程习惯。

 

第六章:C控制语句:循环
1、使用math.h头文件中声明的fabs()函数可以方便地进行浮点数的判等。

2、if(5 == count) 代替 if(count==5) 比较好

3、逗号表达式
   1)a=249,500;等价于a=249; 500;
   2)a=(249,500);等价于a=500;
   3)逗号是分隔符号、,而不是运算符。
   作用(己):保证式子从左往右依次计算,整个表示式的值为最右表达式的值。

4、标准C的风格是:前向声明+main()+函数定义(一般放在单独文件中,所以前向声明必不可少)
 
   现代的编程习惯是把程序的元素分为接口和实现部分,原型和定义就是这样的例子。

 

第七章:C控制语句:分支和跳转
1、if(x>0)
      语句1;
      语句2;
   else       ——这里报错:认为没有所属的if
      语句3;

2、while((ch=getchar()) != '\n') 典型C编程合并两句风格

3、putchar()、getchar()只处理字符

4、<ctype.h>——>字符处理 P158

5、1)检测空白字符
      isspace()<——>(c=='' || c=='\n' || c=='\t')
   2)检测非空白字符
      !isspace()<——>(c!='' && c!='\n' && c!='\t')

6、break语句用于循环和switch中,而continue仅用于循环

 

第八章:字符输入/输出和输入确认
1、键入EOF字符的方式:必须知道您的系统的要求
   1)大多数Unix系统上,在一行的开始键入Ctrl+D会导致传送文件尾信号
   2)许多微型机系统。。。。。。。。。。Ctrl+Z识别为文件尾信号

2、混合输入数字和字符时混合使用getchar()和scanf()
   1)getchar()读取每个字符,包括空格、控制符和换行符
   2)scanf()留‘\n',getchar()会读之,解决getchar()读入scanf()留下的‘\n'时
      while(getchar()!='\n') continue; //跳过输入行的剩余部分(放在scanf部分)

3、输入综合好实例 P207

 

第九章: 函数
1、ptr = &bah; //ptr指向bah
   val = *ptr; //得到ptr指向的值

2、指针是一种新的数据类型,而不是一种整数类型(两整数可相乘可指针不能)

3、交换两数的值
   int a,b;
   void exchange(int *a, int *b){。。。}
   exchange(&a, &b);  //调用交换函数

 

第十章 数组和指针
1、数组初始化,当数值数少于数组元素数目,其余置0
   int a[6]={1,2,3};  ->a[3]=0, a[4]=0; a[5]=0;

2、指定初始化
   int a[12]={31, 28, [4]=31, 30, 31, [1]=29};
                     a[4]=31          a[1]=29;     未被初始化的全为0

3、数组不支持整体赋值

4、使用超出数组边界的索引会改变其他变量的数组

5、声明数组时,方括号内必须用整数常量表达式
   sizeof表达式会被认为是一个整数常量,而(C和C++不一样)一个const值却不是常量表达式
   int a[0]; 错,须大于0
   int n; int a[n]; 错,须常量表达式

6、多维数组初始化时可以省略内部的花括号,保留最外层并个数正确ok
   int a[3][5]={{.....}, {.....}, {.....}};

7、在C中,对一个指针加1的结果是对该指针增加一个存储单元(它指向的对象的字节大小)

8、不能对一个未初始化的指针取值 (int *pt; *pt=5; 错)

9、处理数组的函数只能传递指针是为了提高程序的效率。

10、有关const和指针
    1)指向常量的指针不能用于修改数值
       int a[]={1,2,3,4,5};
       const int *p=a;
       *p=29;  
       p[2]=30; 错
       p++;    

    2)将常量或非常量数据的地址赋值给指向常量的指针是合法的。
       int a[]={1,2,3}; const int b = {4,5,6};
       const int *p=a;   
       const int *p=b;   
       const int *p=&a[2];对
       然而,只有非常量数据赋给普通的指针(否则可以通过指针来修改常量数据)
       int *p=a; 
       int *p=b; 
 
    3)const声明初始化指针,防止指到别处
       int *const p=a; 对
       *p = 92;
       p++;
 
    4)可使用两个const创建指针,使其不可更改指向也不可更改指向的值
       const int*const p=a;
       p++;   
       *p=92; 

11、声明判断
    int sum(int a[][], int row); 
    int sum(int a[][4], int row); 对
    int sum(int a[3][4], int row);对,3被忽略 

12、声明N维数组的指针时,除最左边的方括号可留空外,其他都需填值
    int sum(int a[][3][4][5], int row);
    int sum(int (*a)[3][4][5], int row);

13、C99新特性  变长数组(P274)和复合字(P276)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值