前提条件: C のポインター
C におけるポインタへのポインタは、別のポインタのアドレスを格納したい場合に使用されます。最初のポインタは、変数のアドレスを格納するために使用されます。そして、2 番目のポインターは、最初のポインターのアドレスを格納するために使用されます。そのため、それらは次のようにも知られています。 ダブルポインター 。ポインターへのポインターを使用して、通常のポインターの値を変更したり、可変サイズの 2 次元配列を作成したりできます。ダブル ポインタは、メモリ スタック内で通常のポインタと同じ量のスペースを占有します。
C でのポインターへのポインターの宣言
ポインタからポインタへの宣言は、C でのポインタの宣言に似ています。違いは、ポインタの名前の前に追加の「*」を配置する必要があることです。
Javaでのマージソート
data_type_of_pointer **name_of_variable = & normal_pointer_variable;>
int val = 5; int *ptr = &val; // storing address of val to pointer ptr. int **d_ptr = &ptr; // pointer to a pointer declared // which is pointing to an integer.>
上の図は、ポインターへのポインターのメモリー表現を示しています。最初のポインタ ptr1 には変数のアドレスが格納され、2 番目のポインタ ptr2 には最初のポインタのアドレスが格納されます。
C でのダブル ポインターの例
C
// C program to demonstrate pointer to pointer> #include> int> main()> {> >int> var = 789;> >// pointer for var> >int>* ptr2;> >// double pointer for ptr2> >int>** ptr1;> >// storing address of var in ptr2> >ptr2 = &var;> >// Storing address of ptr2 in ptr1> >ptr1 = &ptr2;> >// Displaying value of var using> >// both single and double pointers> >printf>(>'Value of var = %d
'>, var);> >printf>(>'Value of var using single pointer = %d
'>, *ptr2);> >printf>(>'Value of var using double pointer = %d
'>, **ptr1);> >return> 0;> }> |
>
>
落花生 vs ピーナッツ出力
Value of var = 789 Value of var using single pointer = 789 Value of var using double pointer = 789>
ダブルポインタはどのように機能するのでしょうか?
ダブルポインタの動作は、上の画像を使用して説明できます。
- ダブル ポインターは、上記の構文を使用して宣言されます。
- その後、別のポインタのアドレスをこの新しいダブル ポインタの値として保存します。
- ここで、そのレベルのいずれかを操作または逆参照したい場合は、アスタリスク ( * ) 演算子を目的のレベルまで下位の回数だけ使用する必要があります。
C のポインターからポインターのサイズ
C プログラミング言語では、ダブル ポインターは C の通常のポインターと同様に動作します。したがって、ダブル ポインター変数のサイズは常に通常のポインターと等しくなります。以下の C プログラムを使用してこれを確認できます。
例 1: ポインターへのポインターのサイズを求める C プログラム。
C
// C program to find the size of pointer to pointer> #include> int> main()> {> >// defining single and double pointers> >int> a = 5;> >int>* ptr = &a;> >int>** d_ptr = &ptr;> >// size of single pointer> >printf>(>' Size of normal Pointer: %d
'>,>sizeof>(ptr));> >// size of double pointer> >printf>(>' Size of Double Pointer: %d
'>,>sizeof>(d_ptr));> >return> 0;> }> |
メガバイトとギガバイトの違いは何ですか
>
>出力
Size of normal Pointer: 8 Size of Double Pointer: 8>
注記: 上記のコードの出力は、使用されているマシンのタイプによっても異なります。ポインターのサイズは C プログラミング言語では固定されておらず、使用される CPU アーキテクチャや OS などの他の要因によって決まります。通常、64 ビット オペレーティング システムの場合、サイズは 8 バイト、32 ビット オペレーティング システムの場合、サイズは 4 バイトになります。
C でのダブル ポインターの応用
C におけるポインターへのポインターの主な用途は次のとおりです。
- これらは、多次元配列の動的メモリ割り当てに使用されます。
- これらは、テキスト文書の段落、文、単語のセマンティクスなどのマルチレベル データを保存するために使用できます。
- これらは、コピーせずにノードのアドレスを直接操作するためにデータ構造で使用されます。
- これらは、ローカル ポインタに格納されているアドレスを操作するための関数の引数として使用できます。
C のマルチレベル ポインター
C 言語でサポートされるマルチレベル ポインターはダブル ポインターだけではありません。ダブルポインターの値を変更したい場合はどうすればよいでしょうか?
この場合、トリプル ポインタを使用できます。これは、ポインタへのポインタへのポインタ、つまり int ***t_ptr になります。
トリプルポインタの構文
pointer_type *** pointer_name;>
同様に、トリプル ポインターの値を変更するには、ポインターへのポインター、ポインターへのポインター (4 レベル ポインター) を使用できます。言い換えれば、レベル – x 変数の値を変更するには、レベル – x+1 ポインターを使用できると言えます。そして、この概念はさらに拡張することができます。
注記 : C では任意のレベル ポインタを使用できます。これに関する制限はありませんが、プログラムが非常に複雑になり、エラーが発生しやすくなります。
必読 - C の関数ポインター