C言語で無視されていること(一)
1687 ワード
switch(flag){
case 1:
printf(" 1");
break;
case 2:
printf(" 2");
break;
...
default:
printf("default");
break;
}
現在のcaseラベルに対応する定数が見つからない場合、自動的にdefault実行が選択されることはよく知られていますが、defaultの位置はプログラム実行に関係していますか?もしdefault文をswitchの最初の特典に置いたらどうですか?コードを変更します.
switch(flag){
default:
printf("default");
break;
case 1:
printf(" 1");
break;
case 2:
printf(" 2");
break;
...
}
このように修正すると、defaultのコードが直接実行されますか?プログラミングテストの結果、そうではなく、以前と同じように実行されているため、caseとdefaultの位置はプログラムの実行に影響しないことが分かった.
char* p = new char[32];
int cnt = sizeof * p;
上のコードに問題がありますか?問題ありませんが、運行結果はいくらですか?32?1?それとも他の数字ですか?答えは1です.カッコをつけたら?どの答えがいくらですか.
char* p = new char[32];
int cnt = sizeof (* p);
答えはやはり1です.sizeofオペレータは、pがオブジェクトを指すタイプのバイト数を返すので、オブジェクトの数には関係ありません.上記の例ではpは1つのcharタイプのメモリを指し、charタイプは1バイトしか占めていないため、戻りは1であり、どのcharタイプのメモリが割り当てられているかとは関係ありません.コードを変更します.
int* p = new int[32];
int cnt = sizeof (* p);
ではcntの結果は4です.intはメモリに4バイトを占めているからです.
いつかっこをつけますか.sizeofのオペランドがタイプ名の場合、両側にカッコを付ける必要があります(このため、この関数と勘違いする人もいますが)、オペランドが変数の場合はカッコを付ける必要はありません
int cnt = sizeof (int);
宣言:他の場所でオブジェクトの名前が作成されていることを示しています.この名前を使用すると、何度も現れることができます.キーワードexternを使用する必要がある異なるファイルにも表示することができる.定義:オブジェクトが作成され、1つの場所にのみ表示される特殊な宣言です.