各変数は、メモリロケーションを有し、各メモリ位置アドレスがハイフン( - )演算子のアクセスを使用して定義され、それはメモリ内のアドレスを表します。
#include <iostreamの> 使用して名前空間STD; int型のmain() { int型 VAR1; CHAR VAR2 [ 10 ]; COUT << " VAR1変数アドレス:" ; COUT <<&VAR1 << ENDL、 COUTは、 << " 変数VAR2に取り組みます:" ; COUT << VAR2&<< てendl; リターン0 ; }
結果:
アドレスVAR1変数:0x28fefc アドレスVAR2変数:0x28fef2
ポインタとは何ですか?
ポインタは、その値が別の変数のアドレスを、メモリ位置の、すなわち、直接アドレスで可変です。前と同じように、他の変数または定数と同じように、あなたはアドレスポインタを格納するために他の変数を使用する必要があり、それが宣言されています。ポインタ変数宣言の一般的な形態です。
タイプ*のVaRの -name。
ここでは、型が 基本型のポインタである、それは、有効なC ++のデータ型でなければなりませんVAR-nameは 、ポインタ変数の名前です。乗算に使用されるポインタアスタリスク*アスタリスクを宣言するために使用されるのと同じです。しかし、この声明の中で、アスタリスクはポインタである変数を指定するために使用されます。
INT * IP; / * ポインタ整数* / ダブル * DP; / * double型ポインタ* / フロート * FP; / * フロートへのポインタ* / チャー * CH; / * 文字列ポインタ* /
すべてのポインタ実際のデータ型の値を、整数、浮動小数点、文字列か、または他のデータ型が同じで、代表の長い進メモリアドレスです。異なる定数又は可変データ型へのデータポインタ、ポインタは、異なるタイプの唯一の違い。
Cでのポインタを使用する++
よく次のポインタを使用して行わ:ポインタ変数を定義し、変数は、アドレスポインタへのアクセスポインタ変数で利用可能なアドレスの値が割り当てられます。これらは単項を使用して * オペランドは、指定されたアドレスの変数の値を返します。次の例では、これらのアクションに関する:
#include <iostreamの> 使用して名前空間STD; int型のmain() { int型のVAR = 20であり ; //は本当の変数が宣言int型 * IPを; // ポインタ変数を宣言 * IP = VAR ; // ポインタ変数VARに格納されたアドレス COUT << " 変数varの値:" ; COUT << VAR << てendl; // ポインタアドレスに格納された出力変数 COUT << " に格納されたアドレスIP変数:" ; COUT << << IP endl; //は、アドレスポインタ値にアクセス COUT << " 変数の値* IPを:" ; COUT << IP * << てendl; リターン 0 ; }
値のvar変数:20の 保存されたアドレスに IP変数:0xbfc601ac の値 * IP変数:20
ポインタ型
int型* ptrは、 char * ptrは、 int型** ptrが。 INT(* PTR)[3]。 INT *(* PTR)[4]。
ビューの言語学的観点から、限り、あなたは取り外しポインタ宣言文名にポインタを移動すると、残りはポインタの型です。これは、自身が持つポインタ型です。私たちは、ポインタでの例さまざまな種類を見てみましょう:
INT * PTR; // ポインタ型* int型の チャー * PTR; // ポインタ型*チャー INT ** PTR; // ポインタ型** INT INT(* PTR)[ 3 ]; // ポインタ型int(*)の[3] INT *(* PTR)[ 4 ]; // ポインタは、型int *(*)である[4]
ポインタ、重要な役割へのポインタポイントのタイプの演算です。
ポインタ型(すなわち、タイプポインタ自体)と2つの概念の型へのポインタポイント
ポインタ値
ポインタ自体に格納されたポインタの数値であり、値ではなく、一般的な数値のコンパイラアドレスとして扱われます。すべてのメモリアドレスに32ビット長であるため、32ビットプログラムでは、すべてのタイプのポインタの値は32ビット整数、32ビットのプログラムです。
メモリアドレスからの記憶領域へのポインタポイントは、メモリ領域内のポインタ、長さはsizeof(型ポインタ点)の値で表されます。その後、我々はポインタ値がXXであると言う、XXが向かったメモリアドレスの領域へのポインタポイントと言うと同等であり、我々は、メモリ領域のブロックへのポインタが、それは、これはポインタの値であることを言うと等価であることを言いますメモリ領域の先頭アドレス。
メモリ領域へのポインタのポイントを入力して、ポインタポイントは2つの完全に異なる概念です。一の実施形態では、ポインタのポイントのタイプが持つが、ポインタは初期化されていない、それが存在していないメモリ領域を指し、又は無意味です。
ポインタのメモリ領域は、それ自体によって占められ
ポインタ自体は、どのくらいのメモリを占めて?あなただけ(ポインタ型)関数はsizeofで測定知っているだろう。32ビットプラットフォームでは、ポインタ自体は、長さが4つのバイトを占有します。
ポインタ自体は、ポインタ式は左辺値に有用であるかどうかを決定する際にメモリの概念を占めていました。
ポインタ演算
ポインタは、プラスまたはマイナスの整数を指定できます。このような動作は、典型的には、ポインタと減算の値が同じでないように意味します。
チャー [ 20 ]。 int型 * ptrは= A; ... ... PTR ++;
上記の例では、タイプは、それが可変整数を指すように初期化されるINTのタイプを指し、ポインタptrのint型*です。次に、3番目の文、PTRポインタが1だけインクリメントされ、コンパイラが対処される:それは、ポインタptrのはsizeof(INT)、32ビットプログラムの値を加算し、4を添加します。アドレスは、上位アドレスに4バイトの可変増加のアドレスのアドレスにバイト単位ので、元のPTR点で作られるからです。
char型は、1つのバイト長であるため、元のPTRは、ユニット番号0の配列へのポインタであるように、4つのバイトは、4号ユニットから始まる4つのバイト配列に、この時点で開始されます。
私たちは、配列を反復処理するためにポインタとループを使用することができます
int型の配列[ 20である]; int型 *のPTR = 配列; ... // 整数配列代入コード省略する。 ... のための(I = 0 ;私は< 20であり、Iは++ ) { ( * PTR)++ ; PTR ++。
整数配列プラス1つの単位の各値のこの例。各サイクルのPTRポインタプラス1は、その結果、各ループは、配列の次の要素にアクセスすることができます。
https://blog.csdn.net/poison_biti/article/details/53227488