sizeofとはstrlen

sizeofは、コンパイル時に占有する空間のバイト型の数の結果であろうように配列名パラメータ計算がアレイ全体の大きさであることを確認するために計算されます。strlen関数は、計算の結果は、もはや配列名はポインタに退化によって占められるメモリの種類のサイズではありませんこれは、実行時に計算結果の始まりに過ぎません。

STRLEN():関数は、strlenの最初の0の間で表示されるように、指定したアドレスからの文字数を探し始めます

sizeof()演算子

sizeof https://blog.csdn.net/weixin_41042404/article/details/86719441

この記事では、多くはありありhttps://blog.csdn.net/weixin_41042404/article/details/86719441論文の著者のおかげで、ハンドリング、我々はこの記事では、リンクを添付することを忘れないでください転載します。

以下のコメントは、対応する知識を導入し、Cプログラムであります

書式#include <stdio.hに>

書式#include <文字列>

書式#include <stdlib.h>に含ま

 

typedefの長いTLONG。

(INT F1){0を返します。}。

二重F2(){0.0を返します。}

ボイドF3(){}

組合U1は、関節の定義//

{

    ダブル;

    int型のB;

}。

組合U2

{

    チャー[13]。

    int型のB;

}。

 

組合U3

{

    チャー[13]。

    char型のB;

}。

 

構造体S1

{

    char型;

    ダブルB;

    int型のC;

    char型のD;

}。

 

構造体S2 //構造体の定義

{

    char型;

    char型のB;

    int型のC;

    ダブルD;

}。

 

メインint型()

{

    char型のconst * STR1 = "123456";

    チャーのconst STR2 [] = "123456"。

    チャーのconst STR3 [] = {1、2、3、4、5、6}。

    二重*(* A)[3] [6]。

 

    printf( "はsizeof(* 0009)=%D、strlenをはsizeof(STR1)=%D、(0009)=%d個の\ n"、はsizeof(* 0009)はsizeof(0009)、strlenを(0009)); // 1 4 6は、* str1が最初の最初の文字であり、0009は、統計STR 0前ポインタのsizeof(ポインタ)=文字の4 STRLEN数であります

    printf( "はsizeof(STR2)=%dを、strlenを(STR2)=%Dを\ n"(STR2)strlenを、はsizeof(STR2)); // 7 6、はsizeof(STR2 \ 0のみ計算strlenを計算し、加え\ 0の前に

    printf( "はsizeof(STR3)=%D、strlenを(STR3)=%Dを\ n"、はsizeof(STR3)は、strlenを(STR3)); // 6不定、STR3、配列ではなく、文字列、STRLENあります0 \検出できないが続行されます

    printf( "はsizeof(INT)=%のD、はsizeof(1 == 2)=%Dを\ n"、はsizeof(INT)はsizeof(1 == 2)); // 1 == 2種類がBOOLを対応

    printf( "はsizeof(unsigned int型)==はsizeof(INT)は、%D \ nは"、はsizeof(unsigned int型)は==はsizeof(INT));のみ最上位ビット// 1、符号なし効果、データを意味します長さは変更されません。

    printf( "型定義と比較プロトタイプ= 1%d個の\ n"、はsizeof(長い)==のsizeof(TLONG));元の形状に等しい// 1カスタムタイプはsizeofタイプ値。

    printf( "はsizeofはsizeof 2 =%dを、(2)=%d個の\ n"、はsizeof 2、はsizeof(2)); //正确

//のprintf( "はsizeof INT =%のD、はsizeof(INT)=%d個の\ n"、はsizeof int型、はsizeof(INT)); //結論:エラーに関係なく誰にはsizeofの値の)はsizeofを(追加することができません、最高がプラスされています()。

    printf( "はsizeof(F1())=%dを、sizeo(F2())=%d個の\ n" は、はsizeof(F1())はsizeof(F2())); //正确

    //のprintf( "はsizeof(F3())=%d個の\ n"、はsizeof(F3())); //エラー結論:機能sizeofは、戻り値の関数型は移動ステージに置換され、

    printf( "はsizeof(INT *)=%dを、sizeo(チャー*)=%dを、sizeo(ダブル*)=%Dを\ n"、

        sizeof(INT *)はsizeof(チャー*)はsizeof(ダブル*)); // 4 4 4結論:限りポインタ・サイズは4です。(64ビットマシンが8になることは必ずしもありません)。

    printf( "はsizeof(A)=%dの、はsizeof(* A)=%dの、はsizeof(** A)=%dの、はsizeof(*** A)=%dの、はsizeof(**** A)= %D \ n」は、

        sizeof(a)は、はsizeof(* A)、はsizeof(** A)、はsizeof(*** A)、はsizeof(**** a)参照)。

    / *ので、二重*の実現[3] [6]のポインタ、

    * Aは、二重* [3] [6]多次元配列型を表すために

    因此はsizeofは(* A)= 3 * 6 *のはsizeof(ダブル*)72を=。

    同じ、** Aは、配列型の[6] * doubleを表します

    所以はsizeofは(** A)(ダブル*)= 6 *のはsizeofは24を=。

    ***、二重のある要素の一つは、*と言い、

    したがって、はsizeof(*** A)= 4。、それは二重である、と****など

    所以はsizeof(**** A)=のはsizeof(ダブル)= 8 * /

    printf( "はsizeof(U1)=%のD、はsizeof(U2)=%のD、はsizeof(U3)=%d個の\ n"、

        sizeof(U1)はsizeof(U2)はsizeof(U3))。

    / *連合の大きさが最大のメンバーの一人が占めるスペースの大きさ、そのすべてのメンバーに依存します。

    そうuのため、サイズは二重の種類の最大のメンバーであり、(U)はsizeofので=はsizeof(ダブル)= 8。

    しかし、U2とU3のために、最大空間がcharである[13]型の配列、サイズU3は、なぜ13、16であり、U2は、それは?

    キーは、int型bのメンバーU2です。アライメントU2は、すなわち、4になるように、int型部材の存在のため、

    占有スペース16(境界13に最も近い)になるように、4すべきセクタのサイズにU2。

* /

    printf( "はsizeof(S1)=%のD、はsizeof(S2)=%d個の\ n"、

        sizeof(S1)はsizeof(S2))。

    S1の場合、最初の8つのセクタに入れ、0であると仮定される/ *、その後、次の空きアドレスは、1であります

    しかし、double型の要素では、最も近い8からアドレス1の境界上に置くことがD、8です

    D 8は、セクタCの次の要素が4で、次の空きアドレス16に、この時点で、そのように配置されています

    16出会うので、次の空きアドレス20、セクタの次の要素には、この時点で配置された16のCは、D 1する必要があり、

    また、境界に正確に落ちる、構造体21で得20dは、アドレスで終了します。

    サイズS1は空間24のS1の大きさに、21-23を予約されているように、8の倍数である必要があるからです。

    S2のために、最初の8つのセクタに入れ、0であると仮定され、その後、次の空きアドレスは、1であります

    要素上の境界は1であるので、次フリーアドレスに配置された1 bが2となります。

    セクタCの次の要素は、それが配置され、最も近い2 C 4のアドレスから取得され、4であり、次の空きアドレスは、8となります

    Dの境界の次の要素は、すべての要素が構造体15の端部に、完成した配置、そう8に入れD、8であります

    16によって占められるスペースの合計は、ちょうど8の倍数です。* /

   

    システム(「一時停止」); //役割は、プログラムのポーズを作ることです。

 

    0を返します。

}

 

 

 

結果:

sizeof(* 0009)= 1、はsizeof(STR1)= 4、strlenを(STR1)= 6

sizeof(STR2)= 7、strlenを(STR2)= 6

sizeof(STR3)= 6、strlenを(STR3)= 22

sizeof(INT)= 4、はsizeof(1 == 2)= 1

sizeof(unsigned int型)==はsizeof(int型)值为1

プロトタイプとカスタムタイプ= 11の比較

sizeof 2 = 4、はsizeof(2)= 4

sizeof(F1())= 4、sizeo(F2())= 8

sizeof(int型*)= 4、sizeo(チャー*)= 4、sizeo(ダブル*)= 4

sizeof(A)= 4、はsizeof(* A)= 72、はsizeof(** A)= 24、はsizeof(*** A)4 =はsizeof(**** A)= 8

sizeof(U1)= 8、はsizeof(U2)= 16、はsizeof(U3)= 13

sizeof(S1)= 24、はsizeof(S2)= 16

STRLENニーズは「\ 0」を停止します見ているためにstrlen(STR3)= 22理由はなぜならば、不確実です

チャーのconst STR3 [] = {1、2、3、4、5、6,0}; STRLEN(STR3)= 6

CONSTない場合は、それが実行されている問題が発生します

 

おすすめ

転載: www.cnblogs.com/bihua/p/11696018.html