zoukankan      html  css  js  c++  java
  • c语言中主要的关键字总结

    register:

    定义变量是寄存器保存,不写到内存上

    1. 因为在寄存器上,所以不能取地址
    2. 不能保存存放在databss段的数据
    3. 寄存器相当于内存的高速缓存,增加访问速度,但具体能够保存多少个由cpu决定,多余的将被忽略。

     

    static

    static修饰变量:

    1. static修饰局部变量,第一次遇到时初始化,并将数据存放在data段,所以函数栈针回退时并不会销毁,在程序结束后销毁。
    2. static修饰全局变量:与全局变量不同的是,其他文件在链接时不能找到此变量符号的地址。
    3. c++中,全局变量影响封装,使用类内定义的静态数据成员,通过作用域访问来实现,所以不与全局变量重名(一般在类内定义,类外初始化)。
    4. c++static修饰的数据成员不能再构造函数初始化,需要在定义时初始化。只有静态常整形变量能在类内初始化(static const int)。

    static修饰函数:

    1. c语言中函数加static声明此函数在链接时不可被找到地址,只限本文件可见。
    2. c++中,static修饰的函数没有this指针传入,所以不能访问对象非static数据成员。

     

    NULL

    c语言中 #define NULL void*0,所以对于指针来说p == NULL p == 0 是一个道理。c++#define NULL 0 ,而对于函数的重载又会出现问题,所以引入了新的nullptr,使用类模板的作用于来区分不同类型的NULL

     

    switchcase

    1. 注意记得break
    2. 浮点数不精确
    3. switch相比if else更高效,原因是查看反汇编发现使用寄存器保存值直接去比较然后跳转,而if else每次都需要运算表达式的值再跳转。

     

    const

    c语言中 const 为常变量 不能作为左值

    c++const 为常量 必须初始化 符号为local externglobal

    编译过程中常量名字替换成常量的初值

    编译器要保证const修饰的量不能被直接或者间接修改掉(试图把常量的地址赋值给普通指针)

    如果初始值为变量则退化成常变量

    const & 引用常量(可寻址的常量和不可寻址的常量)

    const右边没有任何指针的话不参与类型,引用不参与类型

     

    volatile  

    在多线程程序中使变量不会被缓存 保证了数据的可见性 不保证原子性

            1.防止编译器对汇编指令进行顺序上的优化

    1. 编译器对指令顺序的调优  volatile
    2. 程序运行时CPU对指令顺序的调优  barrier()

    2.防止寄存器存储变量的副本值

     

    structclass区别:

    1.strcutclass中都可以定义变量函数实现多态继承

    2.struct更偏向于定义数据类型,class偏向于定义对象和方法

    3.class继承默认privatestruct继承默认public

    4.class可以使用模板,struct不行

    对于空structclass因为定义不同的结构体(对象)要区分,最少要分配一字节来存储他,而且要注意内存对齐。

     

    大端小端的判断方法:

    1. 通过联合体判断
    2. printf判断
    3. 取地址强转后解引用

     

    mallocrealloccalloc

    malloc从堆申请一块内存(超过mmap阈值调用匿名映射)。

    calloc 可以在分配后初始化。

    realloc 扩容到新的大小,可能出现的问题:1.函数容易产生歧义,造成内存泄漏 2.realloc可能会移动位置,c++中对象引用外部资源可能造成内存泄漏。

  • 相关阅读:
    mysql替代like模糊查询的方法
    8个超实用的jQuery插件应用
    判断登陆设备是否为手机
    SQL tp3.2 批量更新 saveAll
    SQL-批量插入和批量更新
    防止手机端底部导航被搜索框顶起
    php COM
    thinkphp3.2 where 条件查询 复查的查询语句
    Form表单提交,js验证
    jupyter notebook 使用cmd命令窗口打开
  • 原文地址:https://www.cnblogs.com/zhangtiezi/p/8450030.html
Copyright © 2011-2022 走看看