• 谭浩强C++程序设计--学习小结(重要知识点)


    1. 函数调用应在函数声明之后,函数声明可在main上面,也可在main内部,或者在头文件里?
    2. C语言头文件以.h结尾,新的ANSI C++推出的编译系统不带.h,C++保持兼容,可并存。
    3. C语言无命名空间,因此无需作using namespace说明
    4. C语言中,main函数无返回值: void main(){}
      C++中,int main(){return 0;}
    5. 编译(目标文件 .o/.obj)+库文件和其他目标程序-->连接(汇编)(.exe)
    6. C++数据类型:

    (a)基本类型
      整型:短整型short int 整型int 长整形 long int
      字符型:char
      浮点型:单精度型float 双精度型double 长双精度型 long double
      布尔型:bool
    (b)构造类型
      枚举类型enum
      数组类型
      结构图struct
      共同体union
      类类型class
    (c)指针类型
    (d)引用类型
    (e)空类型
    7.数值的表示
      020 16 16L 1.6e1
    8. 常变量必须在定义时同时给出赋值,不可分开
    9. 用#define a = 100为常量,在编译时做替换,内存中不存在常量
      用const int a = 100为常变量(本身为变量,用const限制不可修改)

    10.不同数据类型运算,先进行类型转换
      double<--float
      |
      long
      |
      unsigned
      |
      int<--short, char
      横向为必须的转换,从下往上优先级更高(低优先级往高优先级转换)
      疑问:int与unsigned做运算,int怎么换为unsigned???

    11.类型不匹配的赋值过程
      float/double-->int,取整数部分
      int-->float/double,以浮点型存储int对应值
      double-->float,若数值超出范围,则报错
      char-->数值,值为ASCII
      int/short/long-->char,取低8位赋值
      signed-->unsigned,连带符号位原内容照搬(数值和符号都发生变化)
      例如-5赋值给unsigned int,可能变为4294967291
    12.赋值运算由右至左执行
      例如,a=b=5;相当于b=5;a=b;
      再如,a+=a-=a*a,若a初值为12,则首先a-=a*a(a=a-a*a)得到a=-132
      然后,a+=a(a=a+a),得到a=2a=-264
    13.顺序求职表达式(逗号表达式)
      expr1,expr2: 值为expr2的值
      例如(a=3*5,a*4),a+5值为65
    14.ddd为八进制
      xhh为16进制
    15.对于输入流,系统会根据变量的类型从输入流中提取相应长度的字节。
      例如,char c1,c2; int a; float b;
      cin>>c1>>c2>>a>>b;
      输入1234 56.78
      则,c1='1';c2='2';a=34;b=56.78;
    16.输出流格式(引用头文件<iomanip>)
      默认cout输出流有效位数为6,可以通过cout<<setprecision(9)设置有效位数为9;
      cout<<setiosflags(ios::fix);固定小数位输出(默认6位小数位)
      cout<<setiosflags(ios::fix)<<setprecision(8);8位有效小数位
      cout<<setiosflags(ios::scientific)
    17.getchar()与putchar()用于输入输出单个字符
      putchar('a');
      putchar(90);
    18. 函数原型:函数声明,通知编译系统,以对包含函数调用的语句进行编译时进行对照。不需要参数名。
      float add(float,float);
    19.内联函数(内置函数)inline function:将调用函数的代码直接嵌入到主调函数中,避免了函数调用保存现场及恢复现场等开销。
      函数之前加inline
      inline只是给编译系统的一个建议,规模小且被频繁调用的简单函数(无switch、循环语句),才能用inline声明,否则编译系统会忽略inline声明,按普通函数处理
    20.函数重载:函数名相同,参数不同,按照多个不同函数调用
    21.函数模板:泛型??
      template<typename T>;
      T max(T a, T b);
    22.内存中用户使用的存储空间:
    (1)程序区
    (2)静态存储区
    (3)动态存储区
      全局变量存储在静态存储区,在程序开始时给全局变量分配存储空间,在程序执行过程中占用固定的存储单元,而不是动态的分配和释放。
      动态存储区:形参,局部变量,现场保护

    23.C++中变量的除了数据类型属性之外,还有存储类别(storage class)
      存储方法分为静态存储和动态存储,具体分为自动【(auto)】、静态【staic】、寄存器【register】和外部【extern】

    23.静态局部变量赋初值是在编译时进行,若在定义时不赋值,编译时自动赋值0或空字符

    24.寄存器变量存放在寄存器中,避免了每次都要内存中存取。对于使用十分频繁的变量,可以在声明为寄存器变量(例如次数较多的while循环)。
      register int i;
      eg.
      register double sum = 0;
      register int i=0;
      register int j=0;
      for(i=0;i<100000;i++)
      {
        for(j=0;j<i;j++)
        {
          sum+=i;
        }
      }
      用时5.2s

      double sum = 0;
      int i=0;
      int j=0;
      for(i=0;i<100000;i++)
      {
        for(j=0;j<i;j++)
        {
          sum+=i;
        }
      }
      用时16.91s
    25.extern 外部变量声明
      适合提前声明本文件中在引用处之后内容中定义的两边,或者在外部其他文件中定义的变量。
    26.对于全局变量,不同文件中不可使用相应命名,否则会报错multiple definition
    27.静态全局变量作用于仅限本文件,其他文件中不可通过extern方式引用
      因此,为了保护本文件中的全局变量,可以加上static
    28.静态全局变量和全局变量都是存放在静态存储区,但是作用域不同。前者仅限本文件,不同文件可以重名;后者可以通过extern扩展作用域,且不可
      同名。
    29.内部函数:static,只有文件内部可以调用;
      外部函数:(extern),可以被外部调用
      调用外部函数时,先(extern) func()声明一下
    30.为什么要#include头文件??
      include操作会将该头文件的所有内容拷贝加入当前的文件,而头文件中包含了外部函数声明以及外部变量声明,而本文件中用到了外部的一些函数(库),因此需要函数原型声明
    31.预处理不属于C++语言本身的内容,是编译之前的一个环节
      预处理:宏定义define、条件编译ifdef、文件包含include
    32.内联函数inline需要和主调函数放在一个文件,因此放在头文件中比较合适
    33.通常,include系统库不使用.h,自定义头文件使用.h
    34.条件编译:根据一定条件选择某些代码编译或不编译

    35.数组在内存中占据连续的存储空间
      数组定义时使用的长度必须是常量表达式
    36.数组定义
      int a[10]={0,1,2,3,4,5,6,7,8,9};
      int a[10]={0,1,2,3,4,5};//未定义部分默认0,长度为10
      int a[]={0,1,2,3,4};//长度为5
      int a[][4] = {{1,2,3,4},{5,6,7,8}};
      int a[][3] = {{0,1,2},{},{3,4,5}}; //3*3
      char s[10] = {'a','b','c','d','e'}; //未定义部分默认''

  • 相关阅读:
    node.js之npm命令安装扩展模块
    jquery选择器(转)
    node.js入门
    node.js之模块
    redhat 下装redis
    html 5之websocket(转)
    node.js安装和环境搭建
    javascript 动态加载脚本库
    HTML5 LocalStorage 本地存储
    【ecmascript】 ECMAScript 6概览【转】
  • 原文地址:https://www.cnblogs.com/xinxinBlog/p/9333766.html
Copyright © 2020-2023  润新知