-6

ここでは、sizeof演算子 in がありCます。データ型のサイズを返していますが、

printf("%d",sizeof(some datatype));

結果は 4 です (OS 依存)。

計算方法が知りたいです。その演算子の背後にあるロジックは何ですか。sizeofオペレーターのコードを書いてくださいと頼んだら。あなたの答えは何ですか?

sizeof注:サイズを計算できるように、コードとしてどのように記述されているか知りたいです。

うまく質問できていないかもしれませんが、ここでもう一度試してみます。

Write one function which we can use instead of sizeof operator.

4

4 に答える 4

5

コンパイラはすべての型のサイズを認識しており、コードを正しく生成する必要がある場合、またはできない場合があります。この情報は、sizeofオペレーターによって使用されます。

sizeofまた、実行時に呼び出される関数ではなく、コンパイル中に完全に評価される演算子であることに注意してください。

于 2013-07-25T12:11:58.707 に答える
1

ウィキペディアからの引用:

ほとんどの場合、 sizeof はコンパイル時の operatorです。つまり、コンパイル中に sizeof 式が定数の result-values に置き換えられます

于 2013-07-25T12:18:53.607 に答える
1

コンパイル時にsizeof(int)、プラットフォーム固有の定数に置き換えられます。sizeofoperator は C コンパイラに完全に実装されています。これは関数呼び出しではなく、ランタイムでは機能しません。

コンパイラでの sizeof のコードは非常に単純です。たとえば、32ビットマシンintでは4バイト、char1バイトなどのハードコードされた値があります。したがって、単純な検索と文字列sizeof(int)4.

ちなみに、単項式では括弧は必要ないので、そのままint t[10]書けばいいのですsizeof t。ただし、タイプ名の式には必要になります。たとえば、sizeof(int). ただ興味深いことです。

于 2013-07-25T12:13:37.947 に答える
0

コンパイル時sizeof(int)に、オペレーティング システム (16 ビット、32 ビット、64 ビット) に応じて適切なサイズに置き換えられます。

文字列に対して独自のサイズの関数を作成できます

またはマクロ

#define SIZEOF(x) ((char*)(&(x) + 1) - (char*)&(x))
于 2013-07-25T12:16:07.343 に答える