在学习c语言的过程中,可能我们很少见到int int *const p,const int *p和int const *p,但当我们在学习c++的过程中,就会遇到这些模糊不清的概概念,如果没搞清楚它们的区别,我们在使用过重中会很痛苦,但如果我们搞懂了它们之间的区别之后,用起来非常方便。

首先int const*p=const int *p;都表示*p的值不能改变,而p(即地址)是可以改变的;

void test001()
{
    int a = 10;
    const int* re = &a;    //指针*re不能改变 re的值可以改变
    int const* re2 = &a;
    //*re = 30;    //err    *re指向内容不能改变
    cout << "re=" << re << ",*re=" << *re << endl;
    cout << "re2=" << re2 << ",*re2=" << *re2 << endl;
    int c = 20;
    re = &c;
    re2 = &c;
    cout << "re=" << re << ",*re=" << *re << endl;
    cout << "re2=" << re2 << ",*re2=" << *re2 << endl;
}

结果:

int *const p,const int *p和int const *p的区别_c语言

至于int *const p;

恰恰和上面的相反,即int *const p表示 p(地址)是常量,不可改变,但是*p的值可以改变

void test002()
{
    int a = 10;
    int * const re = &a;    //指针re不能变 但是*re指向的内容可以变
    *re = 100;
    cout << "re=" << re << ",*re=" << *re << endl;
    int c = 20;
    //re = c;    //err        指针地址不能变
    *re = c;
    cout << "re=" << re << ",*re=" << *re << endl;
}

结果:

int *const p,const int *p和int const *p的区别_c++_02