zoukankan      html  css  js  c++  java
  • C/C++ const限定符与引用和指针

    一、const 限定符: 通常用来定义一个不能被随便改变的值,用来保护变量

             格式: const 类型 变量名 = value;因为const 限定的变量不能被随便改变,所以在定义的时候必须要初始化。同时,试图对已经定义好的变量进行赋值或者其他改变变量value的操作

                 都将引发错误。但是可以间接改变,

              例如:int i=10;  const int &ci= i ;   i=100; 这里最后ci 的值被改变为100;这是引用‘&’的作用,接下来会讲到。

                  或者:  const int num = 10;
                           int* p =(int *)#
                            *p = 100;
                            cout << p << " " << &num << endl;

                                                               p保存的地址和num的地址一样,但是*p可以被赋值,这里num的值就被隐式修改了。

    二、初始化和const: ci是一个整型常量,但是本质上还是一个整型数,所以可以用ci来赋值或者初始化其他的变量。拷贝的值是不会对ci有任何影响。

    三、  默认状态下,const对象仅在文件内有效: 当你定义了一个const 变量 const int buffsize=512;编译器会将代码中所有用到buffsize的地方用512代替,但是这种替代只在文件内有效,

      也就是如果你定义了多个文件file1.cpp ,file2.cpp 等等,并且在file1.cpp文件里定义了buffsize,你就只能在file2.cpp文件里使用buffsize的值,如果你想在file2.cpp文件里使用,你得自己定义一个新的buffsize

      这就相当于在每个文件中buffsize都相当于一个独立的变量。

        但是有时候我们不想编译器为每一个文件分别生成独立的变量,我们想只在一个文件中定义,在其他文件中声明并使用他,就需要extern进行限定。extern表示该变量只定义一次。

      例如在file1中定义 extern const int buffsize=512;在file2.cpp中声明extern const int buffsize;这里的buffsize就是file1中的变量。也就是可以只声明一次,但是value可以在多个文件内共享。

    四、const的引用:

      定义引用相当于给变量起一个别名,例如int &ci=i;区别于指针,这里的ci与i共用一个内存单元,指针是各有一个内存单元,在32位机上指针大小是4

    字节,64位机上是8字节。并且引用定义是必须初始化,并且不能改变绑定其他的内存空间。

    在引用前面加上const 限定符。 int i = 0;const int& ci= i;这里将ci绑定到i上。

      int i=42;

    const int &r1=i;

    const int& r2=r1;

    cosnt int & r3=r1*2;

    int &r4=r1*2;

    这里只有第五行是错误的,因为常量引用可以被非常量的值或者常量值或者常量引用来初始化,但是非常量的引用不能被常量引用初始化。

    五、指针与const

    分为两种一种是指向常量的指针,一种是常量指针。

    格式 : const int *ci =&value; int *const pi=&value;

    这里要区分其实很简单,关键是变量名之前的限定符是‘ * ’,还是const。

    如果是‘ * ’,表明本质还是指针,只不过指向的内容是常量,但是也没有规定必须指向常量这点和常量引用相同,不过有一点就是不能通过指针来改变指向对象的值,但是给以改变指针指向的对象,所以本质还是一个指针。

    相反,变量前是const,那么这个指针就不能改变他所指向的对象,只能改变指向对象的值。即不变的是指针本身(地址不变),可以变的是指针指向的内容。

     

      

  • 相关阅读:
    2.Android之按钮Button和编辑框EditText学习
    《DSP using MATLAB》Problem 3.8
    《DSP using MATLAB》Problem 3.7
    《DSP using MATLAB》Problem 3.6
    《DSP using MATLAB》Problem 3.5
    《DSP using MATLAB》Problem 3.4
    《DSP using MATLAB》Problem 3.3
    《DSP using MATLAB》Problem 3.2
    《DSP using MATLAB》Problem 3.1
    《DSP using MATLAB》Problem 2.20
  • 原文地址:https://www.cnblogs.com/zongji/p/12603754.html
Copyright © 2011-2022 走看看