用指標修改const變數問題

2021-07-05 03:20:16 字數 908 閱讀 9265

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儲存的空間不可以寫,也就是沒有寫許可權,不能修改其值。估計是儲存...