Java程序员学习C++之常量指针和指针常量

常量和指针

声明后还能被修改的叫变量,如果为了保护变量不能被修改就声明为常量,使用const修饰符。

在C++中系统会为指针变量分配一个4字节(32位)的内存块用来存储指向数据的地址,所以指针类型就牵扯到两个概念,,指针本身(4字节的内存块)和指向数据(4字节的内存块存储的地址)。

如果指针和常量结合会有什么问题呢?

声明指针是常量是保护指针本身不能改变 呢,还是保护指向数据不能改变呢,还是两者都会保护呢?

指针常量

定义:指针本身是常量

声明:int * const p = &a;//(const 修饰的是p)

特性:指针指向不能变,但是指向对象可变(保护指针本身不保护指向数据)

#include <iostream>using namespace std;int main(){int a = 1, b = 2;int * const p = &a;*p = 3;//可以编译,可以改变指向数据p = &b;//无法编译,不能重新指向新对象(指针本身不能变)return 0;}

常量指针

定义:指向常量的指针

声明:const int *p = &a;或者int const *p = &a; //(const 修饰的是*p)

特性:指针指向可变,但是指向对象不可变(保护指向数据不保护指针本身)

#include <iostream>using namespace std;int main(){int a = 1, b = 2;const int *p = &a;*p = 3;//无法编译,不能改变指向数据p = &b;//可以编译,可以重新指向新对象(指针本身可以变)b = 3;//但是通过原变量仍然可以改变p指向的数据return 0;}

指向常量的指针变量

定义:指针本身是常量,指向对象也不能变

声明:const int * const p = &a; //(const 修饰的是*p和p)

特性:保护指向数据也保护指针本身

#include <iostream>using namespace std;int main(){int a = 1, b = 2;const int * const p = &a;//两者都保护*p = 3;//无法编译,不能改变指向数据p = &b;//无法编译,不能重新指向新对象(指针本身不能变)return 0;}

常量之间的赋值

#include <iostream>using namespace std;int main(){int const a = 1;int const *p1 = &a;//正确,a是常量不可变,赋给指针p1后a同样不可变int * const p2 = &a;//不正确,a是常量不可变,赋给指针p2后a无法保证不可变int const * const p3 = &a;//正确,a是常量不可变,赋给指针p3后a同样不可变return 0;}

而消极的人则在每个机会都看到某种忧患。

Java程序员学习C++之常量指针和指针常量

相关文章:

你感兴趣的文章:

标签云: