C / C ++は定数ポインタによって改変することができます

私たちは、教育によって、constの定数を定義して初期化しなければならないことを知っており、例えば、初期化後に変更することはできません、constのPI = 3.14; PI = 3.1415は、エラーをコンパイルします。

しかし、実際には一定の強力なポインタによって変更することができます

#include<iostream>
using namespace std;
int main()
{
	const int a = 1;
	int *p = (int *)&a;
	*p = 2;
	cout<<"*q="<<*p<<",a="<<a<<endl;
	
	return 0;
}

ここに画像を挿入説明
あなたは、(* p)が、2に変更されていること、2に修正されたコンテンツを指すメモリアドレスを見ることができますが、まだ初期化1(見の実際の出力一定の折りたたみが)、それがあるためかもしれマクロ定義は、プログラムで、1を定義における類似CONST Cは簡単にはおおよそ1を置き換え、そして2の実数からメモリアドレスによって取られていない遭遇します。実験コードの最適化の第四段階でコンパイル友人の除去は2までの値を発見した後にこれは、コンパイルプロセスに関連しています。

だから、あなたは順番に、メモリのアクセス時間を短縮時間のオーバーヘッドを削減し、すべての後に、定数を変更するために、コンパイラのコード最適化プロセスはまだ表面の一定の「編集」に沿ったものである単純なプロセス1は、定義されているにもかかわらず、ポインタ定数により変更することができます確かに不正な操作です。

公開された12元の記事 ウォン称賛7 ビュー1857

おすすめ

転載: blog.csdn.net/qq_43015237/article/details/104071695