logo

C の sizeof() 演算子

のサイズ() 演算子は C で一般的に使用されます。この演算子は、文字サイズのストレージ ユニットの数で指定された式またはデータ型のサイズを決定します。の のサイズ() 演算子には、式またはデータ型キャストのいずれかの単一のオペランドが含まれます。キャストは括弧で囲まれたデータ型です。データ型は、整数データ型や浮動小数点データ型などのプリミティブ データ型だけでなく、ポインター データ型や、共用体や構造体などの複合データ型にすることもできます。

sizeof() 演算子の必要性

主に、プログラムはプリミティブ データ型のストレージ サイズを知っています。データ型のストレージ サイズは一定ですが、異なるプラットフォームに実装されると変化します。たとえば、次を使用して配列スペースを動的に割り当てます。 のサイズ() オペレーター:

 int *ptr=malloc(10*sizeof(int)); 

上の例では、int 型のキャストに適用される sizeof() 演算子を使用しています。を使用しております malloc() 関数はメモリを割り当て、この割り当てられたメモリを指すポインタを返します。メモリ空間は、int データ型によって占有されるバイト数に 10 を掛けたものに等しくなります。

注記:
出力はマシンごとに異なる場合があります。たとえば、32 ビット オペレーティング システムでは異なる出力が表示され、64 ビット オペレーティング システムでは同じデータ型の異なる出力が表示されます。

のサイズ() 演算子の動作はオペランドの型に応じて異なります。

    オペランドはデータ型です オペランドは式です

オペランドがデータ型の場合。

 #include int main() { int x=89; // variable declaration. printf('size of the variable x is %d', sizeof(x)); // Displaying the size of ?x? variable. printf('
size of the integer data type is %d',sizeof(int)); //Displaying the size of integer data type. printf('
size of the character data type is %d',sizeof(char)); //Displaying the size of character data type. printf('
size of the floating data type is %d',sizeof(float)); //Displaying the size of floating data type. return 0; } 

上記のコードでは、次の助けを借りて、int、char、float などのさまざまなデータ型のサイズを出力しています。 のサイズ() オペレーター。

出力

C の sizeof() 演算子

オペランドが式の場合

 #include int main() { double i=78.0; //variable initialization. float j=6.78; //variable initialization. printf('size of (i+j) expression is : %d',sizeof(i+j)); //Displaying the size of the expression (i+j). return 0; } 

上記のコードでは、それぞれ double 型と float 型の 2 つの変数 'i' と 'j' を作成し、次を使用して式のサイズを出力します。 サイズ(i+j) オペレーター。

出力

 size of (i+j) expression is : 8 

配列と構造体の処理

sizeof() 演算子 は、上記の使用例に加えて、配列や構造体を操作する場合に非常に役立ちます。 連続したブロック 記憶力はとして知られています 配列 いくつかのタスクでは、そのサイズを理解することが重要です。

シェザド・プーナワラ

例えば:

 #include int main() { int arr[] = {1, 2, 3, 4, 5}; int arrSize = sizeof(arr) / sizeof(arr[0]); printf('Size of the array arr is: %d
', sizeof(arr)); printf('Number of elements in arr is: %d
', arrSize); return 0; } 

出力

 Size of the array arr is: 20 Number of elements in arr is: 5 

Sizeof(arr) が返す 配列全体のサイズ (バイト単位)、 sizeof(arr[0]) 配列の最小要素のサイズを返します。配列内の項目の数は、全体のサイズを配列のサイズで割ることによって決定されます。 単一要素 (arrSize) 。この手法を使用すると、コードは引き続き次のようになります。 フレキシブル 配列サイズの変更に直面して。

データリンク層プロトコル

同様に、 sizeof() 演算子 構造体のサイズを把握するには:

 #include struct Person { char name[30]; int age; float salary; }; int main() { struct Person p; printf('Size of the structure Person is: %d bytes
', sizeof(p)); return 0; } 

出力

 Size of the structure Person is: 40 bytes 

動的メモリの割り当てとポインタ演算

その他のアプリケーション sizeof() 演算子 含む ポインタ演算 そして 動的メモリ割り当て 。データ型のサイズを知ることは、データを扱うときに不可欠です。 配列 そして ポインタ 正しいメモリ割り当てと要素アクセスのために。

 #include #include int main() { int *ptr; int numElements = 5; ptr = (int*)malloc(numElements * sizeof(int)); if (ptr == NULL) { printf('Memory allocation failed!
&apos;); return 1; } for (int i = 0; i <numelements; i++) { ptr[i]="i" + 1; } printf('dynamic array elements: '); for (int i="0;" < numelements; printf('%d ', ptr[i]); free(ptr); release allocated memory. return 0; pre> <p> <strong>Output</strong> </p> <pre> Dynamic array elements: 1 2 3 4 5 </pre> <p> <strong>Explanation:</strong> </p> <p>In this example, a size <strong> <em>numElements integer</em> </strong> array has a memory that is dynamically allocated. <strong> <em>numElements * sizeof(int)</em> </strong> bytes represent the total amount of memory allocated. By doing this, the array is guaranteed to have enough room to accommodate the desired amount of integers.</p> <h2>Sizeof() for Unions</h2> <p> <strong> <em>Unions</em> </strong> and the <strong> <em>sizeof() operator</em> </strong> are compatible. <strong> <em>Unions</em> </strong> are comparable to <strong> <em>structures,</em> </strong> except only one member can be active at once, and all its members share memory.</p> <pre> #include union Data { int i; float f; char str[20]; }; int main() { union Data data; printf(&apos;Size of the union Data is: %d bytes
&apos;, sizeof(data)); return 0; } </pre> <p> <strong>Output</strong> </p> <pre> Size of the union Data is: 20 bytes </pre> <p>The <strong> <em>sizeof() operator</em> </strong> is extremely important since it&apos;s essential for <strong> <em>memory management</em> </strong> , <strong> <em>portability</em> </strong> , and <strong> <em>effective data handling</em> </strong> . The <strong> <em>sizeof() operator</em> </strong> is crucial in C for the reasons listed in the list below:</p> <p> <strong>Memory Allocation:</strong> When working with <strong> <em>arrays</em> </strong> and <strong> <em>dynamic memory allocation</em> </strong> , the <strong> <em>sizeof() operator</em> </strong> is frequently used in memory allocation. Knowing the size of <strong> <em>data types</em> </strong> when allocating memory for arrays or structures guarantees that the correct amount of memory is reserved, reducing <strong> <em>memory overflows</em> </strong> and improving memory utilization.</p> <p> <strong>Portability:</strong> Since C is a <strong> <em>popular programming language</em> </strong> , code frequently has to operate on several systems with differing architectures and <strong> <em>data type sizes</em> </strong> . As it specifies the size of data types at compile-time, the <strong> <em>sizeof() operator</em> </strong> aids in designing portable code by enabling programs to adapt automatically to various platforms.</p> <p> <strong>Pointer Arithmetic:</strong> When dealing with pointers, the <strong> <em>sizeof() operator</em> </strong> aids in figuring out <strong> <em>memory offsets</em> </strong> , allowing accurate movement within <strong> <em>data structures, arrays</em> </strong> , and other memory regions. It is extremely helpful when iterating across arrays or dynamically allocated memory.</p> <p> <strong>Handling Binary Data:</strong> The <strong> <em>sizeof() operator</em> </strong> guarantees that the right amount of data is read or written when working with binary data or files, eliminating mistakes brought on by inaccurate data size assumptions.</p> <p> <strong>Unions and Structures:</strong> The <strong> <em>sizeof() operator</em> </strong> is essential when managing <strong> <em>structures</em> </strong> and <strong> <em>unions</em> </strong> , especially when utilizing them to build complicated data structures. <strong> <em>Memory allocation</em> </strong> and access become effective and error-free when you are aware of the size of structures and unions.</p> <p> <strong>Safe Buffer Management:</strong> The <strong> <em>sizeof() operator</em> </strong> helps make sure that the buffer is big enough to hold the data being processed while working with character <strong> <em>arrays (strings)</em> </strong> , preventing <strong> <em>buffer overflows</em> </strong> and <strong> <em>potential security flaws</em> </strong> .</p> <p> <strong>Data Serialization and Deserialization:</strong> The <strong> <em>sizeof() operator</em> </strong> guarantees that the right amount of data is handled, maintaining <strong> <em>data integrity</em> </strong> throughout <strong> <em>data transfer</em> </strong> or storage, in situations where data needs to be serialized (converted to a byte stream) or deserialized (retrieved from a byte stream).</p> <p> <strong>Code Improvement:</strong> Knowing the size of various data formats might occasionally aid in <strong> <em>code optimization</em> </strong> . For instance, it enables the compiler to more effectively align data structures, reducing memory waste and enhancing cache performance.</p> <h2>Sizeof() Operator Requirement in C</h2> <p>The <strong> <em>sizeof() operator</em> </strong> is a key component in C programming due to its need in different elements of memory management and data processing. Understanding <strong> <em>data type</em> </strong> sizes is essential for <strong> <em>effectively allocating memory</em> </strong> , especially when working with arrays and dynamic memory allocation. By ensuring that the appropriate amount of memory is reserved, this information helps to avoid memory overflows and optimize memory use. The <strong> <em>sizeof() operator</em> </strong> is also essential for creating <strong> <em>portable code</em> </strong> , which may execute without <strong> <em>error</em> </strong> on several systems with differing architectures and data type sizes.</p> <p>The program can adapt to many platforms without the need for manual modifications since it supplies the size of data types at compile-time. Additionally, the <strong> <em>sizeof() operator</em> </strong> makes it possible to navigate precisely around data structures and arrays while working with pointers, facilitating safe and effective pointer arithmetic. Another application for the <strong> <em>sizeof() operator</em> </strong> is handling <strong> <em>unions</em> </strong> and <strong> <em>structures</em> </strong> . It ensures precise memory allocation and access within intricate <strong> <em>data structures</em> </strong> , preventing mistakes and inefficiencies. The <strong> <em>sizeof() operator</em> </strong> is a basic tool that enables C programmers to develop effective, portable, and resilient code while optimizing performance and data integrity. It ensures <strong> <em>safe buffer management</em> </strong> and makes data serialization and deserialization easier.</p> <h2>Conclusion:</h2> <p>In summary, the <strong> <em>C sizeof() operator</em> </strong> is a useful tool for calculating the size of many sorts of objects, including <strong> <em>data types, expressions, arrays, structures, unions</em> </strong> , and more. As it offers the size of data types at compile-time, catering to multiple platforms and settings, it enables programmers to create portable and flexible code. Developers may effectively handle <strong> <em>memory allocation, pointer arithmetic</em></strong>  , and <strong> <em>dynamic memory allocation</em> </strong> in their programs by being aware of the storage needs of various data types.</p> <p>When working with <strong> <em>arrays</em> </strong> and <strong> <em>structures</em> </strong> , the <strong> <em>sizeof() operator</em> </strong> is very helpful since it ensures proper <strong> <em>memory allocation</em> </strong> and makes it simple to retrieve elements. Additionally, it facilitates <strong> <em>pointer arithmetic</em> </strong> , making it simpler to move between memory regions. However, because of operator precedence, programmers should be cautious when utilizing complicated expressions with <strong> <em>sizeof() operator</em> </strong> .</p> <p>Overall, learning the <strong> <em>sizeof() operator</em> </strong> equips C programmers to create stable and adaptable software solutions by enabling them to write efficient, dependable, and platform-independent code.</p> <hr></numelements;>

説明:

この例では、サイズ numElements 整数 配列には動的に割り当てられるメモリがあります。 numElements * sizeof(int) バイトは割り当てられたメモリの合計量を表します。こうすることで、配列には必要な量の整数を収容するのに十分なスペースが保証されます。

共用体の Sizeof()

労働組合 そしてその sizeof() 演算子 互換性があります。 労働組合 に匹敵する 構造物、 ただし、同時にアクティブにできるメンバーは 1 つだけであり、そのすべてのメンバーがメモリを共有します。

 #include union Data { int i; float f; char str[20]; }; int main() { union Data data; printf(&apos;Size of the union Data is: %d bytes
&apos;, sizeof(data)); return 0; } 

出力

 Size of the union Data is: 20 bytes 

sizeof() 演算子 に不可欠なため、非常に重要です。 メモリ管理 携帯性 、 そして 効果的なデータ処理 。の sizeof() 演算子 C では、以下のリストに示す理由により、これが重要です。

メモリ割り当て: 一緒に作業するとき 配列 そして 動的メモリ割り当て sizeof() 演算子 メモリ割り当てによく使用されます。サイズを知ることで、 データ型 配列または構造体にメモリを割り当てると、正しい量のメモリが確保されることが保証され、 メモリオーバーフロー メモリ使用率も向上します。

携帯性: C は 人気のあるプログラミング言語 、コードは、アーキテクチャが異なる複数のシステム上で動作する必要があることがよくあり、 データ型のサイズ 。コンパイル時にデータ型のサイズを指定するため、 sizeof() 演算子 プログラムをさまざまなプラットフォームに自動的に適応できるようにすることで、移植可能なコードの設計を支援します。

ポインタ演算: ポインタを扱う場合、 sizeof() 演算子 理解するのに役立つ メモリオフセット 、内部での正確な動きを可能にします データ構造、配列 、およびその他のメモリ領域。これは、配列または動的に割り当てられたメモリを反復処理する場合に非常に役立ちます。

バイナリデータの処理: sizeof() 演算子 バイナリ データまたはファイルを操作するときに適切な量のデータが読み書きされることを保証し、不正確なデータ サイズの仮定によって引き起こされる間違いを排除します。

共用体と構造体: sizeof() 演算子 経営する上で欠かせないもの 構造物 そして 労働組合 特に、複雑なデータ構造を構築するためにそれらを利用する場合。 メモリ割り当て 構造体と共用体のサイズを意識すると、アクセスが効率的になり、エラーがなくなるようになります。

安全なバッファ管理: sizeof() 演算子 バッファが文字の操作中に処理中のデータを保持するのに十分な大きさであることを確認するのに役立ちます 配列(文字列) 、防止する バッファオーバーフロー そして 潜在的なセキュリティ上の欠陥

データのシリアル化と逆シリアル化: sizeof() 演算子 適切な量​​のデータが処理されることを保証し、 データの整合性 全体を通して データ転送 データをシリアル化 (バイト ストリームに変換) または逆シリアル化 (バイト ストリームから取得) する必要がある状況では、ストレージに使用されます。

コードの改善: さまざまなデータ形式のサイズを知ると、場合によっては役立つ場合があります。 コードの最適化 。たとえば、コンパイラがデータ構造をより効果的に調整できるようになり、メモリの無駄が削減され、キャッシュのパフォーマンスが向上します。

C における Sizeof() 演算子の要件

sizeof() 演算子 は、メモリ管理とデータ処理のさまざまな要素で必要とされるため、C プログラミングの重要なコンポーネントです。理解 データ・タイプ サイズは~にとって不可欠です メモリを効果的に割り当てる 、特に配列や動的メモリ割り当てを操作する場合に重要です。この情報は、適切な量のメモリが確実に確保されるようにすることで、メモリのオーバーフローを回避し、メモリの使用を最適化するのに役立ちます。の sizeof() 演算子 創作にも欠かせない ポータブルコード なしで実行できる場合があります。 エラー アーキテクチャとデータ型サイズが異なる複数のシステム上で。

このプログラムは、コンパイル時にデータ型のサイズを提供するため、手動で変更することなく多くのプラットフォームに適応できます。さらに、 sizeof() 演算子 ポインターを操作しながらデータ構造と配列を正確に移動できるようになり、安全で効果的なポインター演算が容易になります。別のアプリケーション sizeof() 演算子 扱っています 労働組合 そして 構造物 。複雑なシステム内でも正確なメモリ割り当てとアクセスを保証します。 データ構造 、ミスや非効率を防ぎます。の sizeof() 演算子 は、C プログラマがパフォーマンスとデータの整合性を最適化しながら、効果的で移植性があり復元力のあるコードを開発できるようにする基本ツールです。それは保証します 安全なバッファ管理 データのシリアル化と逆シリアル化が容易になります。

結論:

要約すると、 Cのsizeof()演算子 は、さまざまな種類のオブジェクトのサイズを計算するのに便利なツールです。 データ型、式、配列、構造体、共用体 、 もっと。コンパイル時にデータ型のサイズを提供し、複数のプラットフォームや設定に対応できるため、プログラマは移植性があり柔軟なコードを作成できます。開発者は効果的に処理できる可能性があります メモリ割り当て、ポインタ演算 、 そして 動的メモリ割り当て さまざまなデータ型のストレージのニーズを認識することで、プログラム内でのデータの保存を可能にします。

Java入力

一緒に作業するとき 配列 そして 構造物 sizeof() 演算子 適切なことが保証されるため、非常に役立ちます メモリ割り当て 要素の取得が簡単になります。さらに、それは容易になります ポインタ演算 により、メモリ領域間の移動が簡単になります。ただし、演​​算子の優先順位があるため、プログラマは複雑な式を使用する場合には注意が必要です。 sizeof() 演算子

全体として、学習するのは、 sizeof() 演算子 C プログラマーが効率的で信頼性が高く、プラットフォームに依存しないコードを作成できるようにすることで、安定した適応性のあるソフトウェア ソリューションを作成できるようにします。