const:
const的设计就是为了干掉#define,主要有三个方面:
1.常数
#include <iostream.h> #define pi 3.1415926 void main() { int a = 5; int b = 3; cout << "a = " << a << endl; cout << &a << endl; cout << &b << endl; // cout << &5 <<endl; //5是常量,没有指针 // cout << "pi = " << pi << endl; // const int c; const int c = 6; // c = 6; cout << &c << endl; cout << "c = " << c << endl; }
在这个程序中,我们看结果,可以看出const也是在栈区,而且是和定义的变量是连在一起的,如果这时候写一句代码,5 = 3,编译是不能通过的,因为5是在代码区的,一般是不允许对代码区的数据赋值的。所以不能通过编译。但是即使是const在内存里面是不能改变的,我们也可以通过指针跳过编译器,然后改变const所指的值。
2.const指针的三个维度:
const 指针 1.指向常量的指针(*P是常量,P不是常量) 2.指针常量(P是常量,*P不是常量) 3.指向常量的指针常量(P是常量,*P是常量)
#include <iostream.h> void main() { const int a = 5; const int b = 6; int c = 7; // int *pa = &a; //不能将const int* 赋值给int* const int* p ; //const 约束了指针所指向的对象的常量性,并未约束指针本身 // *p = 10; //error // p = &b; //ok! 并未约束指针本身 // p = &c; //可以将int* 赋值给const int* // c = 15; // *p = 15; //error, 虽然c可以被赋值,确不能向*p赋值(p指向c), }
在这里,是第一个维度,我们想象成一个扇形,就是发散的那个不能改
第二种是可以摆动,
第三种是都不行。
分别对应之前的那几个。
3.const 函数 表示里面不能带有赋值的语句,其实这种设计涉及到软件工程的思想。