標籤:平台 typedef bre lines 防止 分配 turn 範圍 views
register: 假設有一些變數使用頻繁,則為存取變數的值少花一些時間,能夠將該局部變數的值放在CPU的寄存器中,須要時直接從寄存器中取出參加運算,不必去記憶體中去存取。由於寄存器的存取速度遠遠高於記憶體的存取速度,因此這樣做能夠提高執行效率。這樣的變數叫做“寄存器變數”,用register做聲明。
說明: (1)僅僅有局部自己主動變數和形式參數能夠作為寄存器變數,其它 如全域變數則不能夠。 (2)一個電腦系統中的寄存器數目是有限制的,不能定義隨意 多個寄存器變數。
(3)局部靜態變數不能定義為寄存器變數。const: (1)定義的const常量。具有不可變性。 (2)便於進行類型的檢測,消除了一些不安全的隱患。 (3)保護被修飾的東西,防止的意外的改變影響到程式的安全。
(4)提高了代碼的健壯性。文法邏輯性更加嚴謹。
(5)const類型的變數在程式執行時僅僅有一份拷貝,節省空間的。
(6)編譯器通常不為普通的const常量分配記憶體空間,而是將 它們儲存在符號表中,使它們成為了編譯期的常量。沒有了儲存 與讀記憶體的操作,提高了效率。
static: (1)全域靜態變數或者全域靜態函數: 保護該變數及該靜態函數在其範圍內有效,不能在超出這個 這個範圍的範圍使用。 (2)全域靜態變數儲存在全域資料區,為初始化的系統會給它預設 初始值。局部靜態變數也是儲存在全域資料區,作用範圍僅僅在 它所屬的範圍內,可是生命週期卻存在project的結束。 (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)為一個複雜的聲明起一個簡單或者easy標記的名字。define: (1)對變數僅僅在預先處理階段做原模原樣的替換,不做不論什麼的類型檢測,主要是 定義變數或者定義函數。 (2)使用ifndef,define,endif來防止反覆引用。
靜態庫: 1.浪費空間。每一個程式都有一份。 2.假設有一個地方改動了則須要又一次的編譯載入。
3.執行速度快,不須要動態載入。 動態庫: 1.動態庫僅僅是匯出一個動態表。在程式執行的時候他動態載入。 2.多個程式共用 3.執行時載入。能夠非常easy的改動。就是打補丁。
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;}
C++keyword大總結