1. 程式人生 > >【C++】C++中的const又玩出了新花樣

【C++】C++中的const又玩出了新花樣

“當然,這種修改常量的變態程式碼在實際開發中基本不會出現,本例只是為了說明C和C++對 const 的處理方式的差異。”讀到這兒莫名一樂,哈哈!

在C++中,printf("%d\n", n);語句在編譯時就將 n 的值替換成了 10,效果和printf("%d\n", 10);一樣,不管 n 所在的記憶體如何變化,都不會影響輸出結果。

驗證程式如下:

#include "stdlib.h"
#include "stdio.h"
#include "string.h"
#include <string>
#include "io.h" 
#include <iostream>
#include "time.h"
int main() {
	const int n = 10;
	int *p = (int*)&n;  //必須強制型別轉換
	*p = 99;  //修改const變數的值
	printf("%d\n", n);
	printf("%d\n", *(&n));
	printf("%d\n", *p);
	system("pause");
	return 0;
}

13行和14行都指向了同一個記憶體地址,但13行返回值是10,14行返回值是99