const修饰指针与变量间的三种关系

定义

const定义一个常量,变成只读,中途不能做任何修改。

没有const修饰时,变量本身可以任意修改

 #include 
#include 

int main(void){
    int wife = 24;
    int girl = 18;
    printf("老婆的初始年龄:%d\n",wife);
    printf("女孩的初始年龄:%d\n",girl);
    //第一种
    int *zha_nan = &wife;
    *zha_nan = 25;
    zha_nan = &girl;
    *zha_nan = 19;
    printf("渣男的girl: %d  渣男的wife: %d\n",girl,wife);

    system("pause");
    return 0;
}

####有const修饰时
看const修饰的是离类型(int)近,还是离指针变量名近,离谁近就修饰谁,谁就不能变。

    //第二种
    const int *zhi_nan = &wife;
   // *zhi_nan = 26;//error C3892: “zhi_nan”: 不能给常量赋值(离int近,所以不能修改wife的值)
    printf("直男老婆的年龄:%d\n",*zhi_nan);
    zhi_nan = &girl;//但指针变量还可以继续指向别的地址
    printf("直男女孩的年龄:%d\n",*zhi_nan);

    //第三种
    int *const nuan_nan = &wife;
    *nuan_nan = 26;//因为离指针变量近,所以能修改int类型wife的值
    printf("暖男老婆的年龄: %d\n",wife);
    //nuan_nan = &girl;//error C3892: “nuan_nan”: 不能给常量赋值(所以也就不能修改指针变量的值,也就是不允许指向别的地址)

    //第四种(指针变量和int类型变量都有修饰,所以相互之间都不能再修改)
    const int  *const super_nuan_nan = &wife;
    //*super_nuan_nan = 28;//error C3892: “super_nuan_nan”: 不能给常量赋值
    //super_nuan_nan =&girl;

执行结果

const修饰指针与变量间的三种关系_第1张图片

你可能感兴趣的:(C/C++)