C语言 指针——常量指针、指针常量、指向常量的指针常量

常量指针 与 指针常量(指针是常量)

记忆/摘要

常量指针:
1、含义:常量的指针——指针指向的内容是常量
2、语法:常量前,指针后,所以const在前,*在后——const *

指针常量:
1、含义:指针的常量——指针本身是个常量
2、语法:指针前,常量后,所以*在前,const在后——*const

常量指针(常用!重点!)

常量指针:指针指向的内容是常量
语法:const *

1、常量指针说的是不能通过这个指针改变变量的值
但是可以通过其他的引用来改变变量的值

int main() {
//--------------------------------------  验证: 不能通过常量指针来改变变量的值
    int const *p1;  // 常量指针
    int a = 4;
    p1 = &a;
//    *p1 = 5;  // 编译错误,不能通过常量指针p来改变值

//--------------------------------------  验证: 变量中的值可以通过其他的引用、或变量自身来改变
    a = 5;  // 正确,此时*p==5
    int *p2 = &a;  // 另一个指针
    *p2 = 6;  // 正确,此时*p==6
}

2、常量指针指向的值不能改变,但是这并不意味着指针本身不能改变,
常量指针可以指向其他的地址。

//--------------------------------------  验证: 常量指针指向的地址可以更改
int main() {
    int a = 4;
    int b = 5;
    const int *p;  // 常量指针
    p = &a;  // 正确,此时*p==4
    p = &b;  // 正确,此时*p==5
//    *p = 6;  // 编译错误,不能通过常量指针p来改变值
}

指针常量(不常用)

指针常量是指 指针本身是个常量,不能再指向其他的地址
语法:*const

1、指针常量指向的地址不能改变,但是地址中保存的数值是可以改变的,
可以通过其他指向 该指针的地址 的指针来修改。

int main() {

//--------------------------------------  验证: 指针常量指向的地址不能改变,但是地址中保存的数值是可以改变的
    int a = 4;
    int b = 5;
    int *const p = &a;  // 指针常量  // 要马上初始化(同常量),之后无法赋值
//    p = &b;  // 错误,无法赋值
    *p = 10;  // 正确
//--------------------------------------  验证: 可以通过其他指向 该指针的地址 的指针来修改(不重要,几乎不会用到)
    int **pp = &p;  // 正确,但会出现警告
    printf("%d", *p);
    *pp = &b;  // 正确
    printf("%d", *p);
}

指向常量的指针常量(不常用)

指向常量的常指针是以上两种的结合
语法:const * const

int const *const p;
发布了9 篇原创文章 · 获赞 2 · 访问量 559

猜你喜欢

转载自blog.csdn.net/qq_40939814/article/details/103910167