zoukankan      html  css  js  c++  java
  • const的一些用法和理解

    首先先说一下const常量的用处,我们知道宏定义#define是没有数据类型的,编译器在编译的时候,不会对宏常量进行类型检查,只进行简单的字符串替换,字符串替换时极易产生意想不到的错误,所以这个时候,我们用需要用到某种声明了数据类型的常量,即const常量。 
    在声明语句中,只要将const类型修饰符放在类型名之前,即可将类型名后的标识符声明为具有该类型的const常量。由于编译器将其放在只读存储区,不允许在程序中改变其值,因此const常量只能在定义时赋初值,例如:const 
    double PI =3.1415926;(《C语言程序设计(第3版)》)

    如果在编程中确实有某个值保持不变,就应该明确使用const,这样可以获得编译器的帮助。

    1.const修饰变量

    我们首先看下面一道题目: 
    下面哪两个是等同的:

    int b;
    const int *a = &b;      //1
    const * int a = &b;      //2
    const int* const a = &b;   //3
    int const* const a = &b;     //4

    答案是3、4,为什么呢?我们依次来看: 
    第一个:a是指针,指向int,这个int是静态的,这个const修饰的是int 
    第二个:语法错误,是不存在这种写法的 
    第三个:a是静态指针(第二个const修饰),指向int,这个int是静态的(第一个const修饰) 
    第四个:a是静态指针(第二个const修饰),指向一个静态的变量(第一个const修饰,这个变量是int的) 
    所以3、4是相等的。 
    const修饰变量时: 
    (1)只有一个const,如果const位于*左侧,表示指针所值数据是常量,不能通过解引用修改该数据;指针本身是变量,可以指向其他的内存地址。 
    (2)只有一个const,如果const位于*右侧,表示指针本事是常量,不能指向其他内存地址;指针所值的数据可以通过解引用修改。 
    (3)两个const,*左右各一个,表示指针和指针所指数据都不能修改。

    2.const修饰函数参数

    传递过来的参数在函数内也是不可以改变的,例如:

    void fun(const int a){
        a = 1;   //编译出错
    }
     

    3.const修饰函数返回值

    3.1 指针传递

    如果返回值为const数据类型,未const的指针,返回值也必须一样。因为指针指向的数据是不能修改的,通过这段代码来看一看:

    #include<stdio.h>
    
    const int *fun(){
        int b=2;
        int *a=&b;
    
        return a;
    }
    
    int main()
    {
        const int *a=fun();
        //int *a=fun();      //编译错误
        printf("%d
    ",*a);
    
        return 0;
    }
     

    3.2 按值传递

    如果函数返回值采用“值传递的方式”,由于在此过程中会产生一个副本,所以加const是没有任何意义的,因此,对于值传递来说,加const没有太多意义。 
    例如: 
    不要写类似const int fun()的函数,这样写,还不如不加const。

    4.const的重要作用

    在用指针进行传递参数时,常常用const加以修饰,这样可以保证传递来的参数不被修改,这样可以大大提高程序的健壮性

    参考原文传送门:https://blog.csdn.net/lai_li/article/details/51154426

  • 相关阅读:
    看别人的代码学习的css
    Font Awesome
    响应式网站设计
    css兼容性的问题
    英语
    我的bootstrap使用的历程
    jquery的常用的容易忘记的东西
    jquery基本方法
    js与jquery的区别
    134123
  • 原文地址:https://www.cnblogs.com/mlgjb/p/8846287.html
Copyright © 2011-2022 走看看