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\n", a);
53     printf("*p:%d\n", *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

 

posted @ 2017-03-23 10:44  Shaine  阅读(236)  评论(0编辑  收藏  举报