C++のいくつかの元のポインタ


1.一般タイプポインタT*
int i = 1;int *iP = &i;cout << *iP << endl;
double d = 13.14;double *dP = &d;cout << *dP << endl;
char c = 'a';char *cP = &c;cout << *cP << endl;
1
13.14
a

2.ポインタの配列T*t[]
配列であり、各値はポインタであり、複数のポインタint*a[4]
3.配列のポインタT(*t)[]
ポインタが配列int*a[]を指す
4.const pointerとpointer to const
// const pointer   pointer to const
char strHelloWorld[] = {"helloWorld"};
char const *pStr1 = "helloWorld";  // const     char
char *const pStr2 = "helloWorld";
char const *const pStr3 = "helloWorld";

pStr1 = strHelloWorld;
//    pStr2 = strHelloWorld;  // pStr2   
//    pStr3 = strHelloWorld;  // pStr3   

const修飾子について
  • 左側の一番近い部分を見てください.
  • 左側にない場合は右側
  • を見るchar const *pStr1 = "helloWorld";//constは左側のcharを修飾し、*pStrポインタは変更を許可するが、その指向する空間の内容は変更を許可しない.char *const pStr2 = "helloWorld";//const左側*、それはポインタを修飾して、pStr 2はいったん“helloWorld”のメモリ空間を指したら、constのポインタpStr 2は変化を許さないことを指します.char const *const pStr3 = "helloWorld";//const左側にポインタとcharがあり、pStr 3が指すアドレスと指す空間の内容が変更できないことを示しています.
    5.ポインタを指すポインタ
    int a = 97;
    int *b = &a;
    int **c = &b; //     
    

    *ポインタオペレータには、左から右への結合があります.
    **式は* (*c)に相当し、内側から外側へ階層的に評価する必要があります.
    *cはcが指す位置、すなわちbであり、得られた値が定義済み参照の場合に得られる結果である* (*c)は*bに相当し、aの値を得る
    6.未初期化および不正なポインタ
    int *a;
    *a = 12;
    

    a不正なアドレスにナビゲートし、プログラムエラーが終了しました.最悪の場合:aはアクセス可能なアドレスにナビゲートし、意図せずに変更し、エラーを特定できません.
    7.NULLポインタ
    何も指さない状態を表す特殊なポインタ変数.int *a = NULL;は、例えば、使用する準備ができていないポインタがあり、初期化のためにNULLを指さす.最初はNULLと定義されていて、副作用が発生しないことを知りません.1つのポインタを間接的に参照する前に、ポインタがNULLであるか否かを判断する
    int a = 97;
    int *pA = NULL;
    pA = &a;
    if (pA != NULL) //   
        cout << *pA << endl;
    pA = NULL; //       NULL
    

    8.野指針の根絶
    「ゴミ」メモリへのポインタは、NULLが設定されていないため、ifは彼らに役に立たないと判断します.
    野針には一般的に3つの状況がある.
  • ポインタ変数は
  • 初期化する.
  • 解放されたポインタはNULLを設定せず、deleteとfreeの後のポインタ
  • ポインタ操作は変数の作用範囲
  • を超えている. 、 NULL