1. 程式人生 > >const修飾的常量也是可以被修改的!真的是世界上唯一不變的是變化

const修飾的常量也是可以被修改的!真的是世界上唯一不變的是變化

代碼 出現 const con return printf 不變 存在 真的

這裏我用的編譯器是Dev c++進行測試的,在研究芯片代碼加密的時候偶然發現的const常量也是可以被惡意修改的,所以我在Dev c++裏進行了測試,結果發現果不其然。但是這種行為出現在C/C++裏我個人覺得是不難理解的,使用C語言風格的強制類型轉換本來就是強大而又帶有危險的,並且我認為c/c++提供關鍵字const其實只是提供了語義上的保護,而只要是存在於可讀寫的內存中,通過惡意的行為總是可以修改所謂的const常量。

#include <stdio.h>

int main(void)
{
const int a = 3;
int *p = (int *)(&a);

*p = 1;
printf("%d,%d\n", *p, a);
return 0;
}

首先我用了這段代碼,編譯通過了,並且運行的結果是1,3
這明顯是不符合預期的,看似a的值沒有變化,但是*p卻變化了,於是我果斷加上了關鍵字volatile來修飾a,如下:
volatile const int a = 3;
這下的運行結果就是1,1了

const修飾的常量也是可以被修改的!真的是世界上唯一不變的是變化