register:
如果有一些变量使用频繁,则为存取变量的值少花一些时间,
可以将该局部变量的值放在CPU的寄存器中,需要时直接从寄存器
中取出参加运算,不必去内存中去存取。由于寄存器的存取速度
远远高于内存的存取速度,因此这样做可以提高执行效率。这种
变量叫做“寄存器变量”,用register做声明。
说明:
(1)只有局部自动变量和形式参数可以作为寄存器变量,其他
如全局变量则不可以。
(2)一个计算机系统中的寄存器数目是有限制的,不能定义任意
多个寄存器变量。
(3)局部静态变量不能定义为寄存器变量。
const:
(1)定义的const常量,具有不可变性。
(2)便于进行类型的检测,消除了一些不安全的隐患。
(3)保护被修饰的东西,防止的意外的改变影响到程序的安全。
(4)提高了代码的健壮性,语法逻辑性更加严谨。
(5)const类型的变量在程序运行时只有一份拷贝,节省空间。
(6)编译器通常不为普通的const常量分配内存空间,而是将
它们保存在符号表中,使它们成为了编译期的常量,没有了存储
与读内存的操作,提高了效率。
static:
(1)全局静态变量或者全局静态函数:
保护该变量及该静态函数在其作用域内有效,不能在超出这个
这个作用域的范围使用。
(2)全局静态变量存储在全局数据区,为初始化的系统会给它默认
初始值。局部静态变量也是存储在全局数据区,作用范围只在
它所属的作用域内,但是生命周期却存在工程的结束。
(3)静态成员变量只存在一份拷贝且属于该类而不属于任何成员变量,
静态成员函数只能使用静态成员变量,因为其不属于任何一个对象,
只属于这个类。
volatile:
如果一个基本变量被volatile修饰,等于是告诉编译器不要优
化该变量,意思就是每次取值都直接从内存中存取操作,这对
每次取值都需要变量存储在内存的真实有严格要求的变量来说,
就可以声明为volatile类型,这在多线程中使用的比较多。
typedef:
(1)定义一种类型的别名,而不是简单的宏替换,可以用作同时声明指针
型的多个对象。如:
char *pa,pb//声明了一个指针变量和一个字符变量。
typedef char* CHAR_PTR
CHAR_PTR pa,pb//此处就声明了两个指针变量。
(2)typedef 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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/liuhuiyan_2014/article/details/46817613