zoukankan      html  css  js  c++  java
  • const的基础用法

    const基础知识
    const int a; ==>一个常整形数
    int const b; ==>一个常整形数

    const int *c;==>一个指向常整形数的指针(const修饰的是指针所指向的内存空间,所指向的内存数据不能被修改,但指针本身可以修改)
    int *const d;==>常指针(指针变量不能被修改,但是它所指向内存空间可以被修改)
    const int *const e;==>一个指向常整形的常指针(指针和它所指向的内存空间均不能被修改)

    合理利用const的优点:
    指针做函数参数,可以有效的提高代码可读性,减少bug;
    清楚的分清参数的输入和输出特性

    int setTeacher_err(const Teacher *p)
    const修改形参的时候,在利用形参不能修改指针所指向的内存空间

    C语言中的const是一个冒牌货
    C++语言中的const是一个真正的常量
    结论:
    C语言中的const变量:只读变量,有自己的存储空间;
    C++中const常量:
      可能分配存储空间,也可能不分配存储空间
      当cont常量为全局,并且需要在其他文件中使用,=>分配内存空间
      使用&操作符取const常量的地址,=>分配内存空间

    const分配内存的时机:编译器编译期间

     1 #include<iostream>
     2 using namespace std;
     3 struct Teacher
     4 {
     5     char name[64];
     6     int age;
     7 };
     8 
     9 //指针所指向的内存空间不能被修改
    10 int operatorTeacher01(const Teacher *pT)
    11 {
    12     //pT->age = 10;
    13     return 0;
    14 }
    15 
    16 
    17 //指针变量本身不能被修改
    18 int operatorTeacher02(Teacher *const pT)
    19 {
    20     pT->age = 10;
    21     //pT = NULL;
    22     return 0;
    23 }
    24 
    25 //指针变量本身不能被修改
    26 int operatorTeacher03(const Teacher *const pT)
    27 {
    28     //pT->age = 10;
    29     //pT = NULL;
    30     printf("age:%d", pT->age);
    31     return 0;
    32 }
    33 
    34 void main01()
    35 {
    36     Teacher t1;
    37     t1.age = 33;
    38     operatorTeacher03(&t1);
    39     system("pause");
    40     return;
    41 }
    42 //C语言中的const是一个冒牌货
    43 //C++语言中的const是一个真正的常量
    44 void main02()
    45 {
    46     //好像a是一个常量
    47     const int a = 10;
    48     //a=11;
    49     int *p = NULL;
    50     p = (int *)&a;
    51     *p = 20;//间接赋值
    52     printf("a:%d
    ", a);
    53     printf("*p:%d
    ", *p);
    54     system("pause");
    55 }
    56 
    57 //const分配内存的时机:编译器编译期间
    58 void main03()
    59 {
    60     int a;
    61     const int b = 10;
    62     int c;
    63     //a=11;
    64     printf("&a:%d,&b:%d,&c:%d", &a, &b, &c);
    65     system("pause");
    66 }//运行出来的结果是,b的内存地址介于a,c之间
    67 
    68 //const 和#define 的相同之处
    69 //#define 在编译预处理阶段处理
    70 //const常量是由编译器处理的,提供类型检查和作用域检查
    71 #define d 20
    72 void main()
    73 {
    74     int a = 10;
    75     int b = 20;
    76     //int array[a + b];//在c++中编译不通过,在linux内核里面是成立的
    77                     //原因是linux内核编译器gcc支持,c和c++编译器不支持这种语法现象
    78     const int c = 10;
    79     const int e = 20;
    80     int  array2[c + d];
    81     int arrar3[c+e];
    82     system("pause");
    83 }
    View Code
  • 相关阅读:
    大约 C++ 几个方面分析--overload, override, overwrite, rewrite
    Catalan数总结
    JAVA该队列中的数组,圆阵队列,链队列
    hdu4770:Lights Against Dudely(回溯 + 修剪)
    Birt
    Activity
    简单实现的Servlet文件上传,并显示
    阿里云centos 6.5 32位安装可视化界面的方法
    cannot mount database in EXCLUSIVE mode
    ORA-00845: MEMORY_TARGET not supported on this system
  • 原文地址:https://www.cnblogs.com/hnzsb-vv1130/p/6603888.html
Copyright © 2011-2022 走看看