const屬于變量屬性的一種。使用const修飾的變量,意味著該變量是一個只讀變量,不能隨意的修改該變量的值。但并不意味著,通過const的修飾,該變量就變成了常量,本意上并非常量,只是一個只讀變量。
創新互聯公司專業為企業提供井陘網站建設、井陘做網站、井陘網站設計、井陘網站制作等企業網站建設、網頁設計與制作、井陘企業網站模板建站服務,10年井陘做網站經驗,不只是建網站,更提供有價值的思路和整體網絡服務。
int main(){
const int apple = 1;
apple = 2; //error
system ( "pause" );
return 0;
}
此時,通過const修飾變量apple,此時就是只讀變量(read only variable)。那么是否,該內存中的值真的無法改變。事實并非如此。我們可以通過聲明指針指向該內存空間,通過這個指針,我們是能夠修改變量的值的。代碼如下:
int main(){
const int apple = 1;
int* p = NULL;
p = ( int* )&apple;
printf ( "apple = %d\n", apple );
*p = 2;
printf ( "apple = %d\n", apple );
system ( "pause" );
return 0;
}
我們通過這個指針變量修改了內存中的值。
當我們通過const來修飾一個全局變量時,它同樣是一個只讀變量,無法直接修改其值。
const int glo_apple = 3;
int main()
{
glo_apple = 4; //error
system ( "pause" );
return 0;
}
很顯然,由于glo_apple是只讀變量,在主函數中是無法修改其值的。那么,我們是否可以用同樣的方式,聲明一個指針指向全局變量,對全局變量glo_apple進行操作呢?
const int glo_apple = 3;
int main()
{
int* glo_p = ( int* ) &glo_apple;
*p = 4; //error
printf ( "glo_apple = %d\n", glo_apple ) ;
system ( "pause" );
return 0;
}
如果將這段代碼用現代編譯器編譯一下,會發現,程序會報錯。為什么呢?原因就在于,用const修飾的全局變量被存放在了“只讀存儲區”了。用指向全局變量的指針去修改內存中的值肯定會報錯。
注意:現代C編譯器中的const將具有全局生命周期的變量存儲于只讀存儲區。(比如static局部變量也是具有全局生命周期,所以,用const修飾的static局部變量也是存儲于只讀存儲區)
注意:由于字符串字面量被存儲于只讀存儲區,也就是說,該值是不希望也不能被改變的,所以需要使用const來修飾指針變量指向字符串字面量。例如:
const char p = "chentong";
另外,用const修飾的函數參數,說明不希望在函數內部修改參數的值。用const修飾函數返回值,說明函數的返回值不可變,多用于返回指針的類型。比如,有如下代碼:
#include <stdio.h>
#include <stdlib.h>
const char* f ( const int i ){
i = 4; //error;
return "chentong";
}
int main()
{
const int* p = f( 2 );
printf ( "%s\n", p );
pc[4] = 'o'; //error
printf ( "%s\n", p );
system ( "pause" );
return 0;
}
首先,函數的參數i不能在函數內部被修改,因為它是一個被const修飾的只讀變量。其次,函數的返回值類型是一個const類型的,也就是意味著,函數返回值不可修改,是個只讀變量,因此,在用指針指向這個函數時,需要用const來修飾該指針。而且,不能通過指針去修改函數的返回值。
當前題目:const深度分析
網頁鏈接:http://vcdvsql.cn/article4/jhipie.html
成都網站建設公司_創新互聯,為您提供關鍵詞優化、網站維護、自適應網站、網頁設計公司、App開發、搜索引擎優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯