例を使用したCプログラミングのポインター
ポインターは、別の変数のアドレスを格納する変数です。特定の型の値を保持する他の変数とは異なり、ポインタは変数のアドレスを保持する。たとえば、整数変数は整数値を保持します(または、格納すると言うことができます)が、整数ポインターは整数変数のアドレスを保持します。このガイドでは、例を使用してCプログラミングのポインターについて説明します。
Cのポインターについて説明する前に、簡単な例を挙げて、変数のアドレスの意味を理解しましょう。
ポインタなしで変数のアドレスにアクセスする方法を理解するための簡単な例?
このプログラムには、int型の変数numがあります。 numの値は10であり、この値はメモリのどこかに格納する必要がありますよね?その変数の値を保持する各変数にメモリスペースが割り当てられます。このメモリスペースにはアドレスがあります。たとえば、私たちは家に住んでいて、家には住所があり、他の人が私たちの家を見つけるのに役立ちます。変数の値がメモリアドレスに格納されるのと同じ方法で、Cプログラムが必要なときにその値を見つけるのに役立ちます。
つまり、変数numに割り当てられたアドレスが0x7fff5694dc58
は、numに割り当てる値を、0x7fff5694dc58
の場所に格納する必要があることを意味します。下の図を参照してください。
出力:
Value of variable num is: 10Address of variable num is: 0x7fff5694dc58
Cでのポインタの簡単な例
このプログラムは、ポインタがどのように宣言され、使用されるかを示しています。ポインタを使用して実行できることは他にもいくつかあります。これらについては、このガイドの後半で説明します。今のところ、ポインタを変数のアドレスにリンクする方法を知る必要があります。
注意すべき重要な点は次のとおりです。ポインタのデータ型変数が一致する必要があります。intポインタはint変数のアドレスを保持できます。同様に、floatデータ型で宣言されたポインタはfloat変数のアドレスを保持できます。以下の例では、ポインタと変数はどちらもint型です。
出力:
Address of variable num is: 0x7fff5694dc58
Cポインター–ポインターで使用される演算子
Cのポインターで使用される演算子&と*について説明します。
“Address of”(&)演算子
最初の例では、アンペアサンドを使用して変数のアドレスを表示できることをすでに見てきました。記号。& numを使用して変数numのアドレスにアクセスしました。&演算子は「Addressof」演算子とも呼ばれます。
printf("Address of var is: %p", &num);
注意点:%pは、アドレスを16進形式で表示するために使用される形式指定子です。
これで、取得方法がわかりました。変数のアドレスですが、そのアドレスを他の変数に格納する方法は?そこで、ポインタが浮かび上がります。このガイドの冒頭で述べたように、Cプログラミングのポインタは、別の変数のアドレスを保持するために使用されます。
ポインタは別の変数と同じですが、主な違いは、別の変数のアドレスを格納するのではなく、格納することです。値。
「アドレスの値」(*)演算子
*演算子はアドレスの値演算子とも呼ばれます。
ポインタの宣言方法?
上記はポインタ宣言のいくつかの例です。整数変数のアドレスを格納するためのポインタが必要な場合、ポインタのデータ型はintである必要があります。他のデータ型の場合も同様です。
*演算子を使用すると、ポインタを介して変数の値にアクセスできます。
例:
double a = 10;double *p;p = &a;
* p変数aの値が得られます。次のステートメントは出力として10を表示します。
printf("%d", *p);
同様に、次のように* pointerに値を割り当てた場合:
*p = 200;
vの値が変更されますariablea。上記のステートメントは、aの値を10から200に変更します。
&と*
出力の使用を示すポインターの例:
Value of variable var is: 10Value of variable var is: 10Address of variable var is: 0x7fff5ed98c4cAddress of variable var is: 0x7fff5ed98c4cAddress of pointer p is: 0x7fff5ed98c50
理解を深めるために、さらにいくつかの例を見てみましょう–
char変数chとchのアドレスを保持するポインタptrがあるとしましょう。
char ch="a";char *ptr;
chの値を読み取ります
printf("Value of ch: %c", ch);orprintf("Value of ch: %c", *ptr);
chの値を変更する
ch = "b";or*ptr = "b";
上記のコードは、値「a」を「」に置き換えます。 b 。
次のCプログラムの出力を推測できますか?
出力:
Address of var is: 0x7fff5d027c58Address of var is: 0x7fff5d027c58Value of var is: 10Value of var is: 10Value of var is: 10Value of pointer p is: 0x7fff5d027c58Address of pointer p is: 0x7fff5d027c50
その他のトピックon Pointers
1)Pointer to Pointer –ポインタは別のポインタを指すことができます(つまり、別のポインタのアドレスを格納できます)。このようなポインタは、ダブルポインタまたはポインタへのポインタと呼ばれます。
2)関数へのポインターの受け渡し–ポインターを関数への引数として渡すこともできます。この機能を使用すると、参照によって関数を呼び出すことができ、呼び出し中に配列を関数に渡すことができます。
3)関数ポインタ–関数ポインタは別のポインタと同じように、関数のアドレスを格納するために使用されます。 関数ポインタは、Cプログラムで関数を呼び出すためにも使用できます。