あの年C言語の先生が教えてくれなかったもの(一)

1315 ワード

一、注釈
C言語コメント:/**/(コメントをネストできない)
C++コメント://
プログラムがコンパイル、リンクされると、コメントが「スペース」に置き換えられます.
in/*これはおべっかの注釈*/t aです.実際の効果=in t a;
二、エスケープ文字
\ddd
に転義
8進法
printf("%d",'\010');
//出力8
事実上は
printf("%d",'\10');
\xddd
に転義
16進法
printf("%d",'\x010');
//出力16
事実上は
printf("%d",\x10);
printf("%d",strlen("c:\abc\bef\cht")); 結果は14だと思いますか?No!Dev C++5.10バージョンの答えは11です.なぜですか.コメントお願いします!
三、定数
C言語のconstとC++のconstについて話します.
C言語のconstとは、常属性を持つ変数で、VSのコンパイラは定数と見なさず、ポインタでメモリ内の値を変更することができます.
C++のconstとは、VSのコンパイラが修飾する変数を定数と見なし、ポインタでメモリ内の値を変更できますが、その値はレジスタ内にあります.
VS 08、VC 6.0のコードは次のとおりです.
#include
int main(){
	const int n = 10;
	int a[n];		//             
}

c言語ファイルのコンパイルはエラーを報告して、C++ファイルのコンパイルは成功しました!
ポインタでconstの値を変更する
#include
int main(){
	const int n = 10;
	int *p = (int *)&n;
	*p=10000;
	printf("%d
",n); }

C言語ファイル出力10000、C++ファイル出力10.
なぜC++ファイル出力10?レジスタに存在しているようです.
では、どのように修正しますか?
constの前にキーワードvolatileを付けるだけです.メモリの実行可能性を保証する役割を果たします.
私のせいじゃないの?もともと私の初心もあなたに見せたのではなく、私を嫌っていますか?下のコメントボックスは...