C言語での変数のバインドについて説明します。
ストレージクラスは、変数のスコープ、有効期間、およびバインディングを指定します。
変数を完全に定義するには、その「型」だけでなく、そのストレージクラスについても言及する必要があります。
変数名は、変数の値を格納するためにビットのコレクションが割り当てられる、コンピュータメモリ内の物理的な場所を識別します。
ストレージクラスは次の要素を教えてくれます −
- 変数はどこに(メモリまたはCPUレジスタに)格納されますか?
- 何も初期化されていない場合、変数の初期値はどうなりますか?
- 変数のスコープ(アクセスできる場所)は何ですか?
- 変数の寿命はどれくらいですか?
バインディング
バインディングは、識別子の適用されたオカレンス(使用法)に対応するバインディングオカレンス(宣言/定義)を検索します。
- 変数のスコープを知っておく必要があります。
ブロック構造とは何ですか?
識別子はどのブロックで可変ですか?
- 同じ識別子名を再度使用するとどうなりますか?
「C」は、同じスコープで同じ識別子名を使用することを禁止します。
同じ名前を異なるスコープで使用できます。
例
double f,y; int f( ) //error { --- ---- ---- } double y; //error
例
double y; int f( ){ double f;//legal int y; //legal }
例
以下は、変数をバインドするためのCプログラムです-
#include<stdio.h> int i=33; main() { extern int i; { int i=22; { const volatile unsigned i=11; printf("i=%d\n",i); } printf("i=%d",i); } }
出力
上記のプログラムを実行すると、次の出力が生成されます-
i=11 i=22
-
構造概念を使用してC言語でビットフィールドを説明する
ビットフィールドは、変数のサイズをビット単位で指定するために使用されます。通常、構造内で定義されます。 ビットフィールド:1バイト=8ビット たとえば、 例を以下に説明します- Struct info{ int x:2; }; ここで、xは2ビットを占めています。 範囲外のビットフィールドに値を割り当てることは無効です。 サイズとアドレス演算子はビットフィールドに適用できないため、scanfステートメントを使用してビットフィールドの値を入力することはできません。 ビットフィールドに割り当てることができるデータ型は、int、signed int、uns
-
ユニオンにC言語でのポインタを説明する
ユニオンはメモリロケーションと呼ばれ、さまざまなデータ型のいくつかの変数によって共有されます。 構文 構文は次のとおりです- union uniontag{ datatype member 1; datatype member 2; ---- ---- datatype member n; }; たとえば、 union sample{ int a; float b; char c; }