しかし、自然のスパイシーなチキン--003のsizeofオペレータとはstrlenのログ

(ネットワーク全体からの抜粋、謝罪削除侵入)

C言語はsizeof(IN)データ型または表現であるオペレータの長さを決定する、のsizeofの処理()コンパイル時に行われます。

長さのデータシンボルの種類を決定する上で重要な役割
時にコンパイルされたプログラムのバイト数の演算処理を
バイト数は、メモリ戻り値を占領

sizeofオペレータ(演算子)C / C ++は、単純に、メモリを返すことである関数の数は、オブジェクトタイプによって占有またはバイト数、です。

構文はsizeofの2つの形態が、以下があります:
はsizeof(TYPE_NAME); //はsizeof(タイプ);
はsizeofオブジェクト; //はsizeofオブジェクト。

したがって、
私はint型。
sizeof(I); // OK
のsizeof; // OK
はsizeof(int型); // OK
のsizeofはint; //エラー

オブジェクトのはsizeof計算されたサイズは、オブジェクト・タイプ、のsizeofの値が一致している同じタイプの異なるオブジェクトに変換計算されます。sizeof発現は、発現の種類の最終結果に応じてサイズを決定するためのコンパイラについて評価され、発現は一般に計算されていません。
文字列のstrlenを算出した特定の長さは、メモリの量を算出した後はsizeofは声明で占領しました。

行わstrlenを仕事は、彼が最初の文字列の末尾に来るまで、メモリ内の特定の場所から(真ん中のどこかに、文字列の先頭であること、およびメモリのも、いくつかの不特定の領域ができます)スキャンを開始カウンタであり、文字「\ 0」これまで、その後、カウンタ値を返します(長さは「\ 0」が含まれていません)。

ヘッダstring.hの(C)または(C ++)のCString
形式strlenを(文字ポインタ式)
関数は、文字列の所与の長さに対して計算される
長さの値に戻る(「\ 0」を含む)を指定した文字列を

STRLEN(文字*)関数の評価は、文字列の実際の長さは、それが体験して最初から得られるべきであるである最初の「\ 0」、あなただけがそれを初期値を与えていない定義した場合、結果は不確実です、それは「\ 0」の停止に遭遇するまでは、AA最初のアドレスから見下ろしたであろう。
https://m.baidu.com/from=1012852y/s?word=strlen&sa=tb&ts=1109211&t_kt=0&ie=utf-8&rsv_t=cdf8SIs0dqJqpP2fWfzQYCDr6X1MF5uQn6J2XFIMC%252ByGp8kY3aXA4ax6Lx6yyXc&rsv_pq=8442821039947213956&ss=100&tj=1&rqlang=zh&sugid=15108970644672845905&rsv_sug4=4029&inputT=2449&oq=sizeof% 92 %%% 8Cstrlen E5 E7 9A %%% 84%E5 E5の%のBA%8C%のAB 88%
のsizeof区別とstrlenを:

strlenを文字列の計算特定の長さの文字列の末尾を含まない(文字列のみ)。これは、文字の数を返します。

メモリの計算された量の後に占有はsizeof(バイトサイズ)ではなく、実際の長さを宣言しました。

バイトはのsizeofオペレータを取られ、strlenを関数です。

バイトのsizeof =文字の文字数*が実際の長さより少ない文字の数が定義された長さに等しく、その場合、長さが定義された文字よりも、占有の戻り値の数。整数配列の場合、文字の数の文字の実際の数は、何サイズを定義、議論の分類を指定しない場合、文字列配列のために、文字サイズ、文字+1の実際の数に等しいです。文字列当たり1バイト、文字ごとのデータのバイトの整数は、ビット数が32ビットの4バイト、システムの種類を決定する必要があります。   

sizeof演算子は、あるヘッダファイル内のtypedef unsigned int型として、すなわち、コンパイル時の計算の値は、パラメータは、ポインタ、タイプ、オブジェクト、関数、等々アレイとすることができます。その機能は以下のとおりです。バイトサイズによって確立された最大目標を収容することができます保証を得るために。

ので、コンパイル時に計算され、したがって、サイズがのsizeof動的に割り当てられたメモリ空間を返すために使用することができません。実際には、オブジェクト、構造、または空間のアレイは、オブジェクトの戻り値と、占有のsizeofで割り当て静的戻り型と、構造体に、配列に格納されたコンテンツは問題ではありません。

彼は最初の文字列に来るまではstrlenは、スキャンを開始する(途中のどこかにある文字列の先頭、およびメモリのも、いくつかの不特定領域とすることができる)、メモリ内の特定の場所からのみの作業カウンターを作っターミネータ「\ 0」これまでのところ、その後、カウンタ値を返します(長さが含まれていません「\ 0」)。C言語の表現または文字長のデータタイプを分析するステップと、組立時間のバイト数を計算する関数ではなく、プログラムの実行中に計算するだけでなく。

おすすめ

転載: www.cnblogs.com/jun-ruo-sui-nian/p/diary_003.html