1樓:守望麥香
const主要是為了程式的健壯型,減少程式出錯.
最基本的用法:
const int a=100; b的內容不變,b只能是100也就是宣告一個int型別的常量(#define b =100)
int const b=100; //和上面作用一樣
const指標和引用一般用在函式的引數中
int* m = &a; //出錯,常量只能用常指標
int c= 1;const int*pc = &c;//常指標可指向常量
const int* pa = &a; //指標指向的內容為常量(就是b的值不變)
int const *a = &b; //指標指向的內容為常量(就是b的值不變)*p=3//error
int* const a = &b; //指標為常量,不能更改指標瞭如 a++但可以改值*p=3;
從這可以看出const放在*左側修飾的是指標的內容,const放在*右側修飾的是指標
本身.const引用的用法和指標一樣
int const & a=b; 和指標一樣
const int& a=b; 和指標一樣
但沒有 int& const a=b 的用法因為引用不能做移位運算,但只是出個warning
const int* const a = &b; //綜合應用,一般用來傳遞多維的陣列
類如:char* init = ;
void fun(const int* const a){}
fun(init)//保護引數不被修改
int a(int)const; //是常函式,只能用在類中,呼叫它的物件不能改改變成員值
const int a(); //返回的是常量,所以必須這麼呼叫 cosnt int a=a();
int a(const int); //引數不能改值,可用在任意函式
int a(const int*);
....
int height() const;//常函式只能由常函式呼叫
int max(int,int) const;
int max = max(height(),height());
const int* pheap = new int;
delete pheap;
p = null;//出錯
我的解決辦法是強制型別轉換
const int* pheap = new int(1);
delete (int*)pheap;
pheap = null;
2樓:匿名使用者
const常量,也稱只讀常量,必須初始化,且初值不能改變。如 const int max=10;(const常量max) 而max=100;就是非法的。好處是它的空間可以傳址,只要在「只讀」函式的參數列中增加「只讀」const 標誌,與「只讀」資料的const標誌對應,那麼,編譯器可在編譯階段,對函式呼叫中的const常量傳址的合法性進行檢查。
c語言靜態區域性變數和全域性變數有什麼區別?
3樓:
(1)靜態區域性變數在函式內定義,但不象自動變數那樣,當呼叫時就存在,退出函式時就消失。靜態區域性變數始終存在著,也就是說它的生存期為整個源程式。
(2)靜態區域性變數的生存期雖然為整個源程式,但是其作用域仍與自動變數相同,即只能在定義該變數的函式內使用該變數。退出該函式後, 儘管該變數還繼續存在,但不能使用它。
(3)對基本型別的靜態區域性變數若在說明時未賦以初值,則系統自動賦予0值。而對自動變數不賦初值,則其值是不定的。
根據靜態區域性變數的特點, 可以看出它是一種生存期為整個原始檔的量。雖然離開定義它的函式後不能使用,但如再次呼叫定義它的函式時,它又可繼續使用, 而且儲存了前次被呼叫後留下的值。 因此,當多次呼叫一個函式且要求在呼叫之間保留某些變數的值時,可考慮採用靜態區域性變數。
雖然用全域性變數也可以達到上述目的,但全域性變數有時會造成意外的***(尤其是短名全域性變數的變數名汙染很嚴重),因此仍以採用區域性靜態變數為宜。
簡單的說靜態區域性變數與全域性變數最明顯的區別就在於:全域性變數在其定義後所有函式都能用,但是靜態區域性變數只能在一個函式裡面用。
c語言中用const宣告全域性變數賦初值和不賦初值有何區別?變數存放位置有什麼不一樣?
4樓:匿名使用者
const 最好是賦初值,否則可能出現不可預料的後果。
你無法排除編譯器直接將const變數當成常量來用,另外,全域性變數有些編譯器會預設賦值0.
5樓:匿名使用者
const 定義的常量 是賦初值的 不賦初值 就沒法給值了 因為const 常量 放在系統常量區 那裡的記憶體是隻讀的 除非強制轉換為非const型別 否者無法修改其內容
c語言中如何定義陣列C語言中如何定義陣列
c語言中,同變數一樣 陣列也必須先定義後使用。一維陣列的定義形式 型別識別符號 陣列名 常量表示式 例如int a 10 其中a為地址常量。如變數的定義一樣,int a double a float a等 陣列的定義只是把後面的變數名改為陣列名而已。int a 10 就是定義了一個陣列名為a的陣列 ...
c語言中》和《如何使用C語言中和如何使用?
c語言中 代表左移運算子,代表右移運算子,位移位運算子是將資料看成二進位制數,對其進行向左或向右移動若干位的運算。代表左移運算子 左移運算子用來將一個數的各二進位制位全部左移若干位,移動的位數由右運算元指定,右運算元必須是非負值,其右邊空出的位用0填補,高位左移溢位則捨棄該高位。例如 設無符號短整型...
c語言中如何程式設計計算階乘,C語言中如何程式設計計算階乘
常見bai的有兩種 du 遞迴版本 zhi int fac int n 還有一dao種是迴圈版 int ans 1 for int i 1 i n i ans i 測試方法 include int fac int n int main return 0 有個值得注意內的地方 階乘時,容數增大的很快,...