C++关键字大总结

register:
    如果有一些变量使用频繁,则为存取变量的值少花一些时间,
可以将该局部变量的值放在CPU的寄存器中,需要时直接从寄存器
中取出参加运算,不必去内存中去存取。由于寄存器的存取速度
远远高于内存的存取速度,因此这样做可以提高执行效率。这种
变量叫做“寄存器变量”,用register做声明。
说明:  
     (1)只有局部自动变量和形式参数可以作为寄存器变量,其他
     如全局变量则不可以。
     (2)一个计算机系统中的寄存器数目是有限制的,不能定义任意
            多个寄存器变量。
     (3)局部静态变量不能定义为寄存器变量。
const:
     (1)定义的const常量,具有不可变性。
     (2)便于进行类型的检测,消除了一些不安全的隐患。
     (3)保护被修饰的东西,防止的意外的改变影响到程序的安全。
     (4)提高了代码的健壮性,语法逻辑性更加严谨。
     (5const类型的变量在程序运行时只有一份拷贝,节省空间。
     (6)编译器通常不为普通的const常量分配内存空间,而是将
      它们保存在符号表中,使它们成为了编译期的常量,没有了存储
      与读内存的操作,提高了效率。
static:
     (1)全局静态变量或者全局静态函数:
          保护该变量及该静态函数在其作用域内有效,不能在超出这个
          这个作用域的范围使用。
     (2)全局静态变量存储在全局数据区,为初始化的系统会给它默认
          初始值。局部静态变量也是存储在全局数据区,作用范围只在
          它所属的作用域内,但是生命周期却存在工程的结束。
     (3)静态成员变量只存在一份拷贝且属于该类而不属于任何成员变量,
          静态成员函数只能使用静态成员变量,因为其不属于任何一个对象,
          只属于这个类。
volatile:
          如果一个基本变量被volatile修饰,等于是告诉编译器不要优
          化该变量,意思就是每次取值都直接从内存中存取操作,这对
          每次取值都需要变量存储在内存的真实有严格要求的变量来说,
          就可以声明为volatile类型,这在多线程中使用的比较多。
typedef:
      (1)定义一种类型的别名,而不是简单的宏替换,可以用作同时声明指针
          型的多个对象。如:
          char *pa,pb//声明了一个指针变量和一个字符变量。
          typedef char* CHAR_PTR
          CHAR_PTR pa,pb//此处就声明了两个指针变量。2typedef struct Node
            {
            }Node;//在旧的C语言中用的比较多,为结构体重新起一个别名。3)用typedef来定义与平台无关的类型。
           比如定义一个VAL的浮点类型,在目标平台上可以表示高精度的范围。
           typdef double VAL;
           但是在另一个平台上不支持double类型,我们可以在这个平台上这样
           typedef float VAL;
           这样就可以跨平台的定义自己合适的类型,而不需要修改大量的代码。
      (4)为一个复杂的声明起一个简单或者容易标记的名字。
define:
      (1)对变量只在预处理阶段做原模原样的替换,不做任何的类型检测,主要是
            定义变量或者定义函数。
      (2)使用ifndef,define,endif来防止重复引用。
静态库:
            1.浪费空间,每个程序都有一份。
            2.如果有一个地方修改了则需要重新的编译加载。
            3.执行速度快,不需要动态加载。
    动态库:
            1.动态库只是导出一个动态表,在程序运行的时候他动态加载。
            2.多个程序共享
            3.运行时加载,可以很容易的修改,就是打补丁。
            4.运行的动态加载会花费一定的时间。
}
#include <iostream>
#include <math.h>
using namespace std;
//希尔排序。
void Shell(int a[],int n)
{
    //增量取值。
    //x=log10(n)此函数存在。
    //(log(a)(b))=lg(b)/lg(a)或ln(b)/ln(a) 。
    int m = n;//保存一份长度。
    int len = log10(n) / (log10(2))+3;
    int *b = new int[len];
    int k = 0;
    int temp;
    while (n > 1)
    {
        b[k++] = (n / 2 + 1);
        if (n / 2 == 1)break;
        n = (n / 2) + 1;
    }
    b[k++] = 1;
    for (int i = 0; i < k; ++i)
    {
        temp = b[i];
        for (int j = 0; j < m-temp; ++j)
        {
            if (a[j]>a[j + temp])
            {
                a[j] ^= a[j + temp];
                a[j + temp] ^= a[j];
                a[j] ^= a[j + temp];
            }
        }
    }
}
int main()
{
    int a[] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 4, 5, 6, 0, 1, 2, 3, 5534, 5, 542, 3, 4, 6, 7, 8, 6, 123 };
    //int a[] = { 5, 4, 3, 2, 1 };
    Shell(a, sizeof(a) / sizeof(int));
        for (int i = 0; i < sizeof(a) / sizeof(int); i++)
        {
            cout << a[i] << "  ";
        }
        cout << endl;

    return 0;
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值