まず、ポインタの基本的な概念
役割のポインタ:ポインタができ、間接的にアクセスメモリ。
- メモリは、通常、16進数で表現さ、記録を開始するために0から番号付けされます。
- あなたはポインタ変数がアドレスを保持して使用することができます。
第二に、ポインタ変数の定義と使用
ポインタ変数は、構文を定義:データ型の変数名を*
int型、A = 10 ; // 宣言ポインタ変数 のint * P; // のアドレスへのポインタ P =&; // 使用することは、*メモリ内のデータを検索し、ポインタを間接参照 はcout << * P <<てendl;
第三に、ポインタによって占有されたメモリ空間
32ビットオペレーティングシステムにかかわらず、データ型はポインタデータ型が何であるかの64ビットオペレーティングシステムで4バイト、8バイトです。
第四に、ヌルポインタとフィールドガイド
1.ヌルポインタは:メモリ空間を指すようにポインタ変数は0の番号が付け。
用途:ポインタ変数を初期化します。
注:ヌルポインタメモリにアクセスできません。
int型 * p型= NULL; // * p型; 0〜255のメモリ間のメモリ番号はシステムによって占有され、アクセスすることはできませんされて
2.野生のポインタ:不正なメモリ領域へのポインタ変数ポイント
// 野生のポインタ回避するためのプログラムで、 int型 * P =(int型 *)は0x1100を。
五、のconstポインタの変更
3通りの方法で変更のconstポインタ:
- const修飾ポインタ - ポインタ定数
- constが定数を修正 - ポインタ定数
- CONSTポインタ修正、及び改変定数
INT A = 10 ; int型 B = 10 ; // 定数ポインタは、ポインタの値を変更しないことができ、ポインタを変更することができる @ すなわち、* P = 20が違法である、P =&Bが合法である のconst int型 * P = &; // ポインタ定数は、ポインタを変更しない、ポイント値を変更することができる // 即ち* P2 = 20は、正当であるP2 =&Bが合法でない INT * CONST P2 =&; // 値ポインタ値を変更しない点 // 即ち* P3 = 20ではない法的、P3 =&Bが合法ではない のconst int型 * CONST P3 =&。
六、ポインタ配列を使用して
1.配列の値は、ポインタによってアクセスすることができます
INT のmain(){ int型 ARR [] = { 1、2、3、4、5、6 }; // 配列名のアドレスは、アレイの最初の要素である INT P = * ARR; // アレイにアクセスするためのポインタ最初の要素が // 間接参照は、データの4バイト抽出 COUTを* P << << ENDL; // pは整数へのポインタであるため、その後のp ++実行、次の要素へのポインタであり 、pは++ ; // ポインタは、配列の2番目の要素にアクセスする COUT * P << << ENDL; }
2.ポインタが、アレイを横切ります
// 配列を介してポインタ: INT * P2 = ARR; のための(INT I = 0 ; I <(のsizeof(ARR)/ はsizeof(ARR [ 0 ])); I ++ ){ COUT << P2 * << ENDL、 P2 ++ ; }
七ポインタと機能
主な違いは、基準値または転送することによって渡されます
1.値が渡されます:変更パラメータの値が渡された引数には影響を与えません。
#include <iostreamの> 使用して 名前空間STD; ボイドスワップ(INT NUM1、INT NUM2){ COUT << " NUM1切り替え前の値:" << NUM1 << ENDL; COUT << " NUM2切り替え前の値:" << << NUM2 ENDL; INT TMP = NUM1; NUM1 = NUM2; NUM2 = TMP; COUT << " 交換後NUM1値:" << NUM1 << ENDL、 COUT <<「交換後のNum2をの値:endl; システム(" 休止" ); 戻り 0 ; }
出力:
2.リファレンス転送:引数の値に影響を与えるパラメータの値を変更します。
#include <iostreamの> 使用して 名前空間STD; ボイドスワップ(INT * NUM1、INT * NUM2){ COUT << " NUM1前の値の交流:" << NUM1 * << ENDL; COUT << 」のNUM2切り替え前の値:" << NUM2 * << てendl; int型 TMP = * NUM1; * * = num1をnum2の; num2の= * TMP; COUT << " NUM1を切り替え後の値:" << NUM1 * << てendl; COUT <<「交換後のNum2を値:」* Num2を<< << ENDL; } int型のmain() { int型、A = 1 ; int型の B = 2 ; INT * P1 =&; INT * P2 =&B; COUT << 「以前に渡されていない値の引数:" << << ; ENDL COUT << " :以前にBの引数値を通過しない" << B << ENDL; ;スワップ(P1、P2) COUT << " 値の引数が渡された後に:" << A << てendl; 裁判所未満 << " 引数が渡された後、Bの値:" << B << ENDL; システム(" 一時停止" ); 戻り 0 ; }
出力:
八、および関数ポインタの配列
パッケージング機能は、アレイのバブルソートの使用を指します。
#include <iostreamの> 使用して 名前空間STD; ボイドバブルソート(INT * P、int型の長さ){ // 配列の長さは、ここで算出された場合、出力は1であり、来て最初のものであるため、一方のみが格納された配列の着信アドレス要素 // INT LEN =はsizeof(ARR)/はsizeof(ARR [0]); // COUT lenが<< << ENDL; // ARRは、配列の添字を持つ配列の最初の要素へのポインタであります要素のメモリ空間へのポインタに相当要素の値を、アクセスしたとき // 私の理解は、そのC ++ものに身を置き、値を取得しますである ため(int型私は長さ= - 1 ; I> = 0 ; i-- ) { ため(INT J = I - 1。 ; J> = 0 ; J、){ もし(P [i]が< P [J]){ int型 TMP = P [i]は、 P [I] = P [J]。 P [J] = TMP。 } } } } ボイド printArr(INT * ARR、int型の長さ){ ため(INT iは= 0 ; I <長さ、I ++ ){ COUT << ARR [I] << ENDL。 } } int型のmain(){ int型 ARR [] = { 1、4、2、7、6、3、5 }; // 外側の配列の長さに注意関数計算へ // 計算された関数の内部であれば、最初のエレメントのアドレスの配列パス、長さは常に1からである。 int型の長さ= はsizeof(ARR)/ はsizeof(ARR [ 0 ]); バブルソート(ARR、長さ); printArr(ARR、長さ); システム(" PAUSE " ); 戻り 0 ; }
出力:
入来配列は参照によって渡され、従ってアレイARRの値に影響を与える元の値を変更するが、それは直接プリントアウトすることができ、最終的にそうARR。