const的變數在特定情況下可以通過指標修改,但是在另一些情況下是不能通過指標修改。
以下是vc6下才測試。
1 不能修改的情況
#include
int const a = 10;
void main(void)
程式編譯通過,但執行時錯誤:
指示a儲存的空間不可以寫,也就是沒有寫許可權,不能修改其值。估計是儲存在全域性空間,且只有可讀屬性。
2 能修改的情況
程式能正常執行,且常量被修改了,但是有乙個問題:
為什麼 printf(" a=%d\n", a);
列印a=10?
難道乙個位址空間可以儲存不同的倆個值,當然不能,哈哈,這是因為a是const變數,編譯器對a在預處理的時候就進行了替換。編譯器只對const變數的值讀取一次。所以列印的是10。a實際儲存的值發生了改變。但是為什麼能改變呢,從其儲存位址可以看出來,其儲存在堆疊中。
驗證如下:
變數a和b的位址相近。
總結,const全域性變數儲存在全域性儲存空間,其值只有可讀屬性,不能修改;
const區域性變數儲存在堆疊中,可通過指標修改其值;
const變數在預處理是處理,編譯器只對其值讀取一次。
const變數通過指標修改問題
const的變數在特定情況下可以通過指標修改,但是在另一些情況下是不能通過指標修改。以下是vc6下才測試。1.不能修改的情況 include int const a 10 void main void 程式編譯通過,但執行時錯誤 指示a儲存的空間不可以寫,也就是沒有寫許可權,不能修改其值。估計是儲存...
修改const變數
宣告 不同於c語言的const變數修改問題 可以通過指標間接修改const變數的值 這裡只討論c 裡的const。c const 修飾符,表示常量,即如果以後保證不會修改則宣告為const,否則若要修改,那一開始為什麼還要宣告為const呢?根據c 標準,對於修改const變數,屬於 未定義行為 指...
分享 程式筆試題 const變數通過指標修改問題
const的變數在特定情況下可以通過指標修改,但是在另一些情況下是不能通過指標修改。以下是vc6下才測試。1 不能修改的情況 include int const a 10 void main void 程式編譯通過,但執行時錯誤 指示a儲存的空間不可以寫,也就是沒有寫許可權,不能修改其值。估計是儲存...