学校は【筆記試験の面接】の準備するC言語の基礎知識の1を招きます


間もなく来る校技は、人を奮い立たせる.
まず整理して、C言语の基础知识、知识の点はとてもこまごましていて、すべてふだん见た时の小さい记录で、复习する権利があって、温故知新でしょう~~~指正を歓迎します~~
1、X=X&(X-1)面接問題で、この式を見て何を思い浮かべますか?
=』Xがバイナリに変換された後に含まれる1の個数.
すなわち、右端が0であれば、-1の操作は右端の1を開始し、すべてのビットを逆にし、毎回の&、X右端の1を0にすると、何個の1があり、式は何回実行でき、Xが0になることを知る.したがって一般にcountはXの1のビット数を記録する.
int count = 0;
while(X)
{
  X = X & (X-1);
count ++;
}


または
2、式X,Y、if(X&&Y)文の場合、Xが満たされない場合、Yは実行されないので、Yの変数も変更や計算されません.
3、浮動小数点数はメモリの中で、整数の貯蔵方式とは異なり、float a;では(int&)aは、この浮動小数点数アドレスを除いて始まるsizeof(int)バイトをint型データとして出力することに相当する.
4、①a、bの値は比較的に大きくて、ifを使わないで、?switchまたはその他の判断文.
max = ((a+b)+abs(a-b))/2;
②余分なスペースが使えますが、
int c= a-b;
char *str[] = {"a larger", "b larger"};
c = unsigned(c) >> (sizeof(int)*8 -1);
cout << *str[c];
5、a,bの値を交換し、余分なスペースは適用されません.
a = a^b;
b = a^b;
a = a^b;
分析の下で:b=(a^b)^b=a^b^b=a^0=a;a同理
6、static変数はグローバルデータ領域に格納され、sizeofはスタックのサイズを計算し、class内の静的変数をclassの空間サイズ内に計算しない.
7、sizeofとstrlenの違い:
sizeofとstrlenの結果タイプはunsigned intである.
sizeofはキーワード(ここでは演算子ではないことに注意)、strlenは関数です.
sizeofは関数として使用できます.strlenはchar*であり、'0'で終わる必要があります.
sizeof配列はパラメータとしてポインタに劣化せず、strlen配列はポインタに劣化する.
コンパイル時、sizeofの値はすでに計算され、strlenは関数であり、実行後に結果が出る.
sizeofは、関数タイプ、不完全タイプ、newなどの動的配列のサイズを返すことができない.(もちろん、これはC++にしかない);
8、クラスオブジェクトのサイズ=各非静的データメンバー+ポインタが虚関数テーブル(虚関数)+虚ベーステーブルポインタ(虚継承)+コンパイラへの追加バイト(データ位置合わせ)
9、関数の生命は、パラメータ名を書かずに、パラメータタイプだけを書くことができます.
10、すべての関数はコード領域に配置されます.