const 基本用法

#include<iostream>
using namespace std;
/**
 * @brief main
 * @return
 * 1、常量指针:表示这个指针是一个指向常量的指针(变量)。指针指向的对象是常量,那么这个对象不能被更改。
 *   const int  * c=&m;或者   int  const * c=&m;
 *
 * 2、指针常量:指针变量不可以修改,但是它指向的内存空间的值可以修改。
 *   int  * const d=&n;
 *
 * 3、指向常量的常量指针:指针变量不可以修改,并且指向的内存空间也不可以修改。
 *   const  int  * const d=&n;
 *
 * 4、c语言的const 是一个冒牌货,可以通过指针,进行修改。在c++中不可以修改。在c++中是一个真正的常量。
 * 好处:
 * 1、指针做函数参数可以提高代码的可读性,减少bug
 * 2、清楚的分清参数的输入和输出的特性。
 *
 * 结论:
 * 1、在c 语言中,编译器会给const 修饰的成员变量分配内存空间。
 * 2、在c++中,可能分配内存空间,也有可能不分配内存空间。
 *  当const 作为 全局变量。供其他文件使用的时候分配内存。
 *  当使用取地址符号的时候取const 常量地址的时候,会分配内存空间。int *p=(int *)&a; 会给 a分配一个内存空间,并且p指向这个内存空间。
 *  其余的时候const 是被存储在 符号表中,不会分配内存空间。
 *
 */
int main(){
    const int a=10;
    int const  b=20;   //这个两者是等价的。 存在于符号表
    int *p=(int *)&a;  //1、在 c 语言中const 修改的 变量是假的,可以通过指针修改。在c++中就不会修改常量的值。
    *p=30;
    cout<<a<<endl;  //
    cout<<*p<<endl; //指向a 的时候,会单独开辟一个内存空间,存取 *p的值。
    int  m=10;
    int  n=20;
    const int  * c=&m;  //c 是一个常量指针;指针变量可以修改,但是它指向的内存空间m 的值不可以修改。
    // *c=30;  指向的内存空间的值,不能够修改。
     c=&n;  //指针变量可以修改。
    int * const  d=&n;  //d 是一个指针常量;  指针变量不可以修改。  但是它指向的内存空间不可以修改。
     //  d=&m;  //指针变量不可以修改。
     *d=100;  //指向内存空间的值可以修改。
}


struct teacher
{
    int age;
    char name[20];
};

/**
 * @brief opearNum
 * @param p
 * @return
 * 常量指针
 * 指针指向的内存空间不能够被修改
 */
int  opearNum(const teacher  *p){
     // p->age=10;  //错误
      p=NULL;
      return 0;
}
/**
 * @brief opearNum
 * @param p
 * @return
 * 指针常量
 * 指针变量本身不能够被修改
 */
int  opearNum2( teacher  * const p){
      p->age=10;
     // p=NULL; //错误
      return 0;
}

/**
 * @brief opearNum
 * @param p
 * @return
 * 指向常量的常量指针
 * 指针变量本身不能够被修改,指向的内存空间也不能够被修改。
 */
int  opearNum3(   const teacher  * const p){
    //   p->age=10;  //错误
     // p=NULL;
      return 0;
}



猜你喜欢

转载自blog.csdn.net/qq_30272539/article/details/81380986
今日推荐