C语言中的指针常量和常量指针

620 阅读1分钟

指针常量和常量指针

指针变量和变量指针其实是const和*之间的较量

如何读以及如何理解

一、如何读: *(指针)和 const(常量) 谁在前先读谁 二、如何理解: * 象征着地址,const象征着内容;谁在前面谁就不允许改变。

常量指针

  • 定义:
const *p;
  • 解析:
    • 指针可以指向任意变量
    • 不能通过指针修改变量的值

指针常量

  • 定义:
* const p;
  • 解析
    • 指针不指向其他地址
    • 可通过指针修改变量的值

完整示例:

int main(int argc, const char * argv[]) {
    
    //1. 常量指针:1>指针可以指向任意变量;2.不能通过指针修改变量的值
    int a = 10;
    const int *p1 = &a;
    printf("a address = %p\np1 point address1 = %p\n",&a,p1);
    
    //1.1>指针可以指向任意变量;
    int b = 20;
    p1 = &b;
    printf("b address = %p\np1 point address2 = %p",&b,p1);
    
    //1.2>不能通过指针修改变量的值
//    *p1 = 0;//编译失败:Read-only variable is not assignable
    
    
    
    printf("\n\n----------以上为常量指针,以下为指针常量----------\n\n");
    
    
    //2.指针常量:2.1>指针不可指向其他地址;2.2可通过指针修改变量的值
    int c = 100;
    int *const p2 = &c;
    printf("c value = %d,c address = %p\n",c,&c);
    printf("p2 point address1 = %p\n",p2);
    //2.1>指针不可指向其他地址
    int d = 200;
//    p2 = &d;//编译失败:Cannot assign to variable 'p2' with const-qualified type 'int *const'
    
    //2.2可通过指针修改变量的值
    *p2 = d;
    printf("d = %d,c=%d\n",d,c);
    printf("p2 point value=%d\n",*p2);
    return 0;
}

欢迎关注公众号与我联系

微信公众号.jpg