C言語で非常に巨大なポインタを説明する
メモリモデルとセグメントに応じて、ポインタは3つのタイプに分類されます-
- ポインタの近く
- 遠いポインタ
- 巨大なポインタ
ポインタの近く
-
これは、メモリの64Kbデータセグメントの範囲で機能するポインタです。
-
そのデータセグメントを超えてアドレスにアクセスすることはできません。
-
算術演算子を使用して、ニアポインタをアドレス範囲にインクリメントまたはデクリメントできます。
-
キーワードnearを使用すると、任意のポインタをnearポインタとして作成できます。
構文
構文は次のとおりです-
<data type> near <pointer definition> <data type> near <function definition>
次のステートメントは、変数s
のニアポインターを宣言します。char near *string;
プログラム
次のプログラムは、ニアポインタの使用法を示しています。
#include<stdio.h> int main(){ int number=50; int near* p; p=&number; printf("%d",sizeof(p)); return 0; }
出力
出力は次のとおりです-
2
遠いポインタ
-
これは、ポインタが差分しているオフセットアドレスとセグメントアドレスの両方を格納するポインタです。
-
16のセグメントすべてにアクセスできます。
-
ファーポインタアドレスの範囲は0〜1MBです。
-
ポインタをインクリメントまたはデクリメントすると、オフセット部分のみが変更されます。
構文
構文は以下のとおりです-
<data type> far <pointer definition> <data type> far <function definition>
次のステートメントは、変数s
のfarポインターを宣言します。char far *s;
プログラム
次のプログラムは、farポインタの使用法を示しています。
#include<stdio.h> int main(){ int number=50; int far *p; p=&number; printf("%d",sizeof number); return 0; }
出力
出力は次のとおりです-
4
巨大なポインター
-
どちらも32ビットアドレスであるため、サイズの点ではfarポインタに似たポインタです。
-
巨大なポインタは、セグメントの作業に悩まされることなくインクリメントできます。
プログラム
次のプログラムは、巨大なポインタの使用法を示しています。
#include<stdio.h> Int main(){ Char huge *far *ptr; Printf("%d%d%d",sizeof(ptr),sizeof(*ptr),sizeof(**ptr)); Return 0; }
出力
出力は次のとおりです-
4 4 1
-
ユニオンにC言語でのポインタを説明する
ユニオンはメモリロケーションと呼ばれ、さまざまなデータ型のいくつかの変数によって共有されます。 構文 構文は次のとおりです- union uniontag{ datatype member 1; datatype member 2; ---- ---- datatype member n; }; たとえば、 union sample{ int a; float b; char c; }
-
C言語でのポインタアクセスの概念を説明する
ポインタは、他の変数のアドレスを格納する変数です。 ポインタの宣言、初期化、アクセス 次のステートメントを検討してください- int qty = 179; ポインタの宣言 int *p; 「p」は、別の整数変数のアドレスを保持するポインタ変数です。 ポインタの初期化 アドレス演算子(&)は、ポインタ変数を初期化するために使用されます。 int qty = 175; int *p; p= &qty; 文字列の配列内の要素にアクセスする際にポインタがどのように役立つかの例を考えてみましょう。 このプログラムでは、特定の場所に存在する要素にアクセスしようとしています。操