标签:
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 函数 表示里面不能带有赋值的语句,其实这种设计涉及到软件工程的思想。
标签:
原文地址:http://www.cnblogs.com/wit-lq/p/4881163.html