1定义常量(定义常量必须初始化)
const int ival=10;
int const ival=10;//和上面的等价
2定义指向常量的指针(常量指针)
int a=10;
const int *pa=&a //pa可以改,但是所指向的内容不能修改
3定义指针常量
int b;
int *const pb=&b; //pb指向对象不能改,当时可以改内容
4定义指向常量的指针常量
const int a=10;
const int *const *pa=&a; //什么都不能修改,pa也可以指向一个非const的值
例如 int a=10 ;
const int *const *pa=&a;
C++中的const 和c中的define区别
(1)编译器处理方式不同
define 在预处理阶段展开
const常量在编译运行阶段使用
(2)类型和安全检查不同
define 没类型检查,仅仅是展开
const 常量有具体的类型,编译阶段会执行类型检查
#include <iostream>
//using namespace std;
#define MAX 100//宏定义:是在编译期间进行的字符串的替换
//没有类型检查,它会把错误发生的时机推迟到运行期
int main(void)
{
const int ival = 10;//首先要进行初始化 10是literal(字面值)
//使用const修饰的常量在编译期是具有类型的,
//它可以将错误的发生在编译就确定下来
std::cout << "ival = " << ival << std::endl;
int ival2 = 20;
const int ival3 = ival2;//通过一个变量来对常量进行初始化
std::cout << "ival3 = " << ival << std::endl;
const int *p2 = &ival2;//表示p2指针所指向的内容不能被修改
//*p2 = 30;//Error
int const *p3 = &ival2;//表示p3指针所指向的内容不能被修改 //(pointer to const)
//*p3 = 30;//Error
std::cout << "*p3 = " << *p3 << std::endl;
int * const p4 = &ival2;//表示p4指针本身的值不能被修改 //(const pointer)
*p4 = 40;
std::cout << "*p4 = " << *p4 << std::endl;
std::cout << "ival2 = " << ival2 << std::endl;
int ival4 = 50;
//p4 = &ival4;//Error
p3 = &ival4;
std::cout << "*p3 = " << *p3 << std::endl;
const int * const p5 = &ival4;
int const * const p6 = &ival4;
//*p5 = 60;
//p5 = &ival;
return 0;
}