詳細なconst int*pとint*const pの違い(定数ポインタと定数を指すポインタ)


指針と定数については、以下の3つの形態が正しい。

const char * myPtr = &char_A;//
char * const myPtr = &char_A;//
const char * const myPtr = &char_A;//
以下、この3つのタイプを順次紹介する。*操作子は左オペレータであるため、左オペレータの優先度は右から左へとなり、1.定数ポインタ

int * const p
については、まずconstを見てから*を見る。pは定数タイプのポインタであり、このポインタの指向は修正できないが、このポインタが指すアドレスに格納されている値は修正できる。例1:

#include<iostream>
#include<stdlib.h>
using namespace std;
void main()
{
    int i1=30;
    int i2=40;
    int * const pi=&i1;// pi 。
    //pi=&i2;     // ,pi , 。 。
    printf("%d
", *pi ) ;   // 30
    i1=80;     //5. : *pi=80; ? , *pi i1 。
    printf("%d
", *pi ) ;   // 80
    system("pause");
}
例2:

char char_A = 'A';
char char_B = 'B';

char * const myPtr = &char_A;
myPtr = &char_B;    // error - can't change address of myPtr
2.定数を指すポインタ

const int *p
は、まず*を見てからconstを見て、ポインタが1つの定数を指すことを定義し、ポインタによってこのポインタの値を変更することができない。例3:

#include<iostream>
#include<stdlib.h>
using namespace std;
void main()
{
    int i1=30;
    int i2=40;
    const int * pi=&i1;
    printf("%d
", *pi ) ;   // 30
    pi=&i2;     // ,pi
    i2=80;     // : *pi=80; ?
    printf("%d
", *pi ) ;   // 80
    system("pause");
}
例4

char char_A = 'A';
const char * myPtr = &char_A;
*myPtr = 'J';    // error - can't change value of *myPtr
、したがって、ポインタpが指す整数値は定数であり、その値は修正されない。3.定数を指す定数ポインタは、「定数を指す定数ポインタ」に対して、上記1と2の内容を同時に満たす必要があり、ポインタの値を変更することもできず、ポインタの指す値を変更することもできない。4.文字配列と文字ポインタ文字配列と文字ポインタを導入する定義は、aを定数ポインタとして理解することができ、pは定数を指すポインタであり、コード例は以下の通りである。

char a[] = "I Love You!"; //
char *p = "I Love You!";  //
出力値は、IaLove You!I Love Youa。