C和C 的區別三 const的修飾

2021-08-20 04:01:08 字數 2036 閱讀 7669

c和c++的區別三【const的修飾】

在c語言中

1)const修飾的變數稱為常變數,在定義時可以進行初始化,也可以不初始化;但是如果在定義時未初始化的情況下,以後都不能在修改了,所在一般在定義時都進行了初始化;

例如:

const int num = 10;

const int b;

b = 20;//error

2)由於這個常變數本質還是乙個變數,所以不可用於陣列的下標;

例如:

const int num = 10;

//int array[num] = ;error

3)在本檔案引用其他檔案中的const修飾的量時,跟普通變數一樣,只要在本檔案中加extern宣告一下即可;

4)由於這個常變數本質還是乙個變數,我們可以定義指標通過解引用來改變變數的值;

例如:

int main()

上述****:

所以說常變數是一種特殊的變數,它的編譯方式和普通變數的編譯方式一摸一樣,只是常變數不能作為左值而已

在c++中

1)const修飾的變數稱為常量,在定義時必須進行初始化,因為在c++的編譯規則中,與編譯階段,所有使用常量所在的地方都被替換成它的初始值;

例如:

const int a = 10;

//a = 12;//error;在c++中const一旦初始化後則不能改變

const int s;//在c++中const是常量必須初始化

2)由於本質是乙個常量,所以可用於陣列的下標;

例如:

const int a = 10;

int arr[a];//合法

3)在本檔案引用其他檔案中的const修飾的量時,它的作用域為local,本檔案所有,所以需要在const常量定義處外加extern,因為在編譯時它會直接在檔案中展開;

例如:

檔案中

const int baby = 10;

檔案中

extern const int baby;

int main()

結果:

1>c和c++的區別.obj : error lnk2001: 無法解析的外部符號 "int const baby" (?baby@@3hb)

1>d:\vs練習**\c++\c++複習\debug\c++複習.exe : fatal error lnk1120: 1 個無法解析的外部命令

********** 生成: 成功 0 個,失敗 1 個,最新 0 個,跳過 0 個 **********

::若想使得作用域變為global,則在定義處前加extern,則編譯的時候當作global符號進行處理,則其他檔案中可用;

4)由於本質是乙個常量,我們不可以定義指標通過解引用來改變變數的值;

const int a = 10;

int *p = (int *)&a;

*p = 20;//error

5)引用乙個編譯階段不明確的值的時候是常變數            常量-------》常變數;

例如:

int main()

{ int a = 10;

const int b = a;

int *p = (int *)&b;

*p = 20;

cout結果:

所以說可以被修改,所以這塊是常變數;(而不是常量了);

C語言const的修飾

1.修飾變數 用const宣告乙個變數,其值是不可改變的,例如 const int dat dat 1 這是錯誤的,dat的值不可改變 對const變數只能在初始化的時候賦值,並且一旦賦值後其值不可改變,正確初始化const變數如下 const int dat 1 2.修飾指標 對於用const宣告...

C和C 中const的區別

原文出自 一.c語言中的const const是c語言中保留的乙個關鍵字,它用來限定乙個變數是唯讀的,即不可變的。程式中使用const可以在一定程度上提高程式的健壯性,但是程式中使用過多的const,可能在對 的閱讀時增加一定的難度。1 用const修飾一般變數 注意在c語言中,用const修飾的變...

C和C 中的const區別

合理的利用const 有以下優點 1 指標做函式引數,可以有效提高 的可讀性,減少bug 2 清楚分清引數的輸入和輸出特性。而c語言中的const,並不是真正的const,可以通過指標,間接修改const變數的值 例如 const int a 10 int p null p int a p 20 間...