Cプログラミングのポインター:ポインター、タイプ、例とは
Cのポインタとは何ですか?
Cのポインタは、別の変数のアドレスを格納する変数です。ポインタを使用して、別のポインタ関数を参照することもできます。ポインタはインクリメント/デクリメントできます。つまり、次/前のメモリ位置を指すことができます。ポインタの目的は、メモリスペースを節約し、実行時間を短縮することです。
Cでポインタを使用する方法
int型の変数vを宣言すると、vは実際に値を格納します。
vはゼロになりました。
ただし、値以外の各変数にもアドレスがあります(または、簡単に言えば、メモリ内のどこにあるか)。アドレスは、変数名の前にアンパサンド(&)を付けることで取得できます。
変数のアドレスを画面に出力すると、次のように表示されます。完全に乱数のように(さらに、実行ごとに異なる場合があります)。
Cのポインターを使用して実際にこれを試してみましょう。例
このプログラムの出力は-480613588です。
さて、ポインタとは何ですか?値を格納する代わりに、ポインタは変数のアドレスを格納します。
ポインタ変数
Int * y = & v;
変数 |
POINTER |
名前付きストレージ/メモリアドレスに格納されている値 |
別の変数のストレージ/メモリアドレスを指す変数 |
ポインターの宣言
変数と同様に、Cプログラムのポインターmmingは、プログラムで使用する前に宣言する必要があります。ポインタは、Cの命名規則に従っている限り、任意の名前を付けることができます。ポインタ宣言の形式は次のとおりです。
data_type * pointer_variable_name;
ここでは
- data_typeは、Cの変数型のポインターの基本型であり、ポインターが指す変数の型を示します。
- アスタリスク(*:使用されるのと同じアスタリスク乗算の場合)、これは間接演算子であり、ポインタを宣言します。
このCポインタチュートリアルでいくつかの有効なポインタ宣言を見てみましょう。
ポインタを初期化します
ポインタを宣言した後、標準変数のように変数アドレスで初期化します。 Cプログラミングのポインターが初期化されておらず、プログラムで使用されていない場合、結果は予測できず、悲惨な結果になる可能性があります。
変数のアドレスを取得するには、アドレスが必要な変数の名前の前に配置されたアンパサンド(&)演算子を使用します。ポインタの初期化は、次の構文で行われます。
ポインタ構文
pointer = &variable;
ポインタを説明するための簡単なプログラムを以下に示します。
出力:
Address stored in a variable p is:60ff08Value stored in a variable p is:10
演算子 | 意味 |
* | 2つの目的を果たします
|
& | 1つの目的のみを提供
|
Cのポインタの種類
Cのさまざまなタイプのポインタは次のとおりです。
ヌルポインタ
ポインタ宣言中にnull値を割り当てることにより、nullポインタを作成できます。この方法は、ポインタにアドレスが割り当てられていない場合に役立ちます。ヌルポインタには常に値0が含まれます。
次のプログラムは、ヌルポインタの使用法を示しています。
#include <stdio.h>int main(){int *p = NULL; //null pointerprintf("The value inside variable p is:\n%x”,p);return 0;}
出力:
The value inside variable p is:0
ボイドポインタ
Cプログラミングでは、ボイドポインタは汎用ポインタとも呼ばれます。標準のデータ型はありません。 voidポインタは、キーワードvoidを使用して作成されます。任意の変数のアドレスを格納するために使用できます。
次のプログラムは、voidポインタの使用法を示しています。
#include <stdio.h>int main(){void *p = NULL; //void pointerprintf("The size of pointer is:%d\n",sizeof(p));return 0;}
出力:
The size of pointer is:4
ワイルドポインタ
ポインタが何にも初期化されていない場合、ポインタはワイルドポインタと呼ばれます。これらのタイプのCポインタは、未知のメモリ位置を指している可能性があり、プログラムで問題が発生したり、プログラムがクラッシュしたりする可能性があるため、効率的ではありません。ワイルドポインタを操作するときは、常に注意する必要があります。
次のプログラムは、ワイルドポインタの使用法を示しています。
#include <stdio.h>int main(){int *p; //wild pointerprintf("\n%d",*p);return