zoukankan      html  css  js  c++  java
  • 理解C语言const

    初值

    因为const修饰变量时,变量不可更改,所以一定要给变量初始化

    写法

    下面两种写法作用是一样的,都是修饰局部变量,使number的值不可更改

    const int number = 2;
    int const number = 2;
    

    当常量遇到指针

    分享一下个人理解指针的小技巧:*右边代表指针本身的属性,*左边代表指针指向的内容的属性。

    在一个操作系统中,指针本身的数据类型总是固定的,所以并不需要像其他变量一样有本身的类型说明,只需要命名就好了,所*右边往往只有指针的名字。但指针指向的变量,需要指定变量的类型,所以*左边往往是指向的变量的类型。
    用这个技巧来理解一下指针常量和常量指针吧

    指针常量——指针是常量:指针,本身不可变

    int * const n;
    
    int a = 5;
    int * const n = &a;
    
    // ok
    a = 6;
    // ok
    *n = 6;
    
    int b = 6;
    //error;
    n = &b;
    

    常量指针——常量的指针:指针,指向的内容有const属性,本身可变

    const int * n;
    int const * n;
    

    注意:这里说的指向的内容有const属性仅仅是指通过这个指针不可改变其内容

    int a = 5;
    const int * n = &a;
    
    // ok
    a = 6;
    // error
    *n = 6;
    
    int b = 6;
    // ok
    n = &b;
    

    指向常量的指针常量:指针,指向的内容有const属性,本身不可变

    const int * const n;
    
    int a = 5;
    const int * const n = &a;
    
    // ok
    a = 6;
    // error
    *n = 6;
    
    int b = 6;
    // error
    n = &b;
    

    赋值时的雷区

    没有被const修饰的变量可以赋值给被const修饰的变量;

    char a;
    // ok
    const char b = a;
    

    没有被const修饰的变量的指针可以赋值给被const修饰的变量的指针;

    char *ptr;
    // ok
    const char *p = ptr;
    
    char **ptr;
    //ok
    char * const *p = ptr;
    

    指针类型不同不可赋值;

    char **ptr;		// char *类型的指针
    // error
    const char **p = ptr;	// const char *类型的指针
    

    当常量遇到函数

    常量指针作为参数

    void func(int *a, const int *b);
    

    函数内部不能修改参数b,通常情况下,a为输出参数,b为输入参数

    指针常量作为参数

    void func(int *const a, int *const b);
    

    参数a,参数b指向的地址不可修改

    常量指针作为返回值

    const int *func();
    

    返回值指向的内容不可修改,返回值只能赋值同类型的常量指针

    update at 2017/9/20
    by 一颗球

  • 相关阅读:
    Docker入门(windows版),利用Docker创建一个Hello World的web项目
    SpringBoot集成JWT实现token验证
    Jedis的基本操作
    Java动态代理详解
    SpringBoot利用自定义注解实现通用的JWT校验方案
    递归——汉诺塔问题(python实现)
    Datatable删除行的Delete和Remove方法的区别
    C# DEV使用心得
    总结
    安装插件时
  • 原文地址:https://www.cnblogs.com/chunzhulovefeiyue/p/7565096.html
Copyright © 2011-2022 走看看