C - ポインター
C のポインターは、簡単に楽しく学ぶことができます。一部の C プログラミング タスクはポインターを使用するとより簡単に実行できますが、動的メモリ割り当てなどの他のタスクはポインターを使用しないと実行できません。したがって、完全な C プログラマーになるにはポインターを学ぶ必要があります。シンプルで簡単な手順で学習を始めましょう。
ご存知のように、すべての変数はメモリ ロケーションであり、すべてのメモリ ロケーションにはアドレスが定義されており、メモリ内のアドレスを示すアンパサンド (&) 演算子を使用してアクセスできます。定義された変数のアドレスを出力する次の例を考えてみましょう-
ライブデモ#include <stdio.h> int main () { int var1; char var2[10]; printf("Address of var1 variable: %x\n", &var1 ); printf("Address of var2 variable: %x\n", &var2 ); return 0; }
上記のコードをコンパイルして実行すると、次の結果が生成されます −
Address of var1 variable: bff5a400 Address of var2 variable: bff5a3f6
ポインタとは?
ポインタ 値が別の変数のアドレス、つまりメモリ位置の直接アドレスである変数です。変数や定数と同様に、ポインターを使用して変数アドレスを格納する前に、ポインターを宣言する必要があります。ポインタ変数宣言の一般的な形式は −
type *var-name;
ここに入力してください ポインタの基本型です。有効な C データ型および var-name でなければなりません ポインター変数の名前です。ポインターの宣言に使用されるアスタリスク * は、乗算に使用されるアスタリスクと同じです。ただし、このステートメントでは、変数をポインターとして指定するためにアスタリスクが使用されています。有効なポインター宣言のいくつかを見てみましょう −
int *ip; /* pointer to an integer */ double *dp; /* pointer to a double */ float *fp; /* pointer to a float */ char *ch /* pointer to a character */
すべてのポインターの値の実際のデータ型は、整数、浮動小数点、文字、またはその他のいずれであっても同じで、メモリ アドレスを表す長い 16 進数です。異なるデータ型のポインター間の唯一の違いは、ポインターが指す変数または定数のデータ型です。
ポインタの使い方
いくつかの重要な操作があり、ポインターを使用して非常に頻繁に実行します。 (a) ポインタ変数 (b) を定義します 変数のアドレスをポインタに代入し、(c) 最後に、ポインター変数で使用可能なアドレスの値にアクセスします。これは、単項演算子 * を使用して行われます オペランドで指定されたアドレスにある変数の値を返します。次の例では、これらの操作を利用しています −
ライブデモ#include <stdio.h> int main () { int var = 20; /* actual variable declaration */ int *ip; /* pointer variable declaration */ ip = &var; /* store address of var in pointer variable*/ printf("Address of var variable: %x\n", &var ); /* address stored in pointer variable */ printf("Address stored in ip variable: %x\n", ip ); /* access the value using the pointer */ printf("Value of *ip variable: %d\n", *ip ); return 0; }
上記のコードをコンパイルして実行すると、次の結果が生成されます −
Address of var variable: bffd8b3c Address stored in ip variable: bffd8b3c Value of *ip variable: 20
NULL ポインター
割り当てられる正確なアドレスがない場合に備えて、ポインタ変数に NULL 値を割り当てることは常に良い方法です。これは、変数宣言時に行われます。 NULL が割り当てられたポインタは null と呼ばれます ポインター。
NULL ポインタは、いくつかの標準ライブラリで定義されているゼロの値を持つ定数です。次のプログラムを検討してください −
ライブデモ#include <stdio.h> int main () { int *ptr = NULL; printf("The value of ptr is : %x\n", ptr ); return 0; }
上記のコードをコンパイルして実行すると、次の結果が生成されます −
The value of ptr is 0
ほとんどのオペレーティング システムでは、メモリがオペレーティング システムによって予約されているため、プログラムはアドレス 0 のメモリにアクセスできません。ただし、メモリアドレス 0 には特別な意味があります。これは、ポインタがアクセス可能なメモリ位置を指すように意図されていないことを示しています。ただし慣例により、ポインターにヌル (ゼロ) 値が含まれている場合、ポインターは何も指していないと見なされます。
null ポインターを確認するには、次のように「if」ステートメントを使用できます-
if(ptr) /* succeeds if p is not null */ if(!ptr) /* succeeds if p is null */
ポインタの詳細
ポインターには多くの簡単な概念があり、C プログラミングにとって非常に重要です。次の重要なポインターの概念は、C プログラマーには明らかなはずです −
Sr.No. | コンセプトと説明 |
---|---|
1 | ポインタ演算 ポインターで使用できる算術演算子は 4 つあります:++、--、+、- |
2 | ポインタの配列 多数のポインターを保持する配列を定義できます。 |
3 | ポインタへのポインタ C では、ポインタ上にポインタを配置できます。 |
4 | C での関数へのポインタの受け渡し 引数を参照またはアドレスで渡すと、呼び出された関数によって呼び出し元の関数で渡された引数を変更できます。 |
5 | C の関数からポインターを返す C では、関数がローカル変数、静的変数、および動的に割り当てられたメモリへのポインターを返すこともできます。 |
C言語