C語言中,const如何修飾全域性變數 區域性變數?有什麼好處

2022-03-11 06:17:16 字數 2372 閱讀 2109

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 有個值得注意內的地方 階乘時,容數增大的很快,...