C/C++中的const和指针组合

在C++里,const修饰指针有以下三种情况

(1)指针常量:即指向常量的指针

const  int *p或者int const *p

const在*前,,可以这样理解它的功能,因为const在*前,所以p指向的这个int变量对于*p来说是const的,即不能通过*p改变这个变量的值,但是变量本身可以随便改变自己的值。另外也可以改变p的指向。

例:

int x=2;

int y=3;

const int *p=&x;

*p=4;   //错误,不能通过*p改变变量的值

x=4;    //可以,x不是一个常量,可以改变自己的值

p=&y;   //可以,指针p本身不是一个常量,可以改变p的指向。

(2)常量指针:

int * const p,const在*的后面,也就是说指针p本身是个常量,不能改变p的指向。但是可以通过*p改变所指向变量的值。

例:

int x=2;

int y=3;

int * const p=&x;     //注:因为指针p是常量,在声明时就应该初始化。

*p=4;   //可以

x=4;    //可以,x不是一个常量,可以改变自己的值

p=&y;   //错误,指针q本身是一个常量,不能改变它的指向。

(3)指向常量的常量指针: 这是前两种的结合,功能也是前两者的结合,即不能改变p的指向,也不能通过*p改变所指向的变量的值。

const int * const p或者int const *p

例:

int x=2;

int y=3;

const int * const pq=&x;

*pq=4;   //不可以,不能通过*pq改变所指变量的指。

x=4;    //可以,x不是一个常量,可以改变自己的值

p=&y;   //错误,指针pq本身是一个常量,不能改变它的指向。

总结:从上面可以看出,不论那种情况,变量本身都是可以改变自己的值的,除非变量本身就是声明成常量(const int x=2;)。区别三种情况关键就是看const在类型前还是在指针前,在类型前,不能通过*p改变变量的值,在指针前不能改变指针的指向,且在声明时就要初始化。

时间: 2024-11-06 11:57:35

C/C++中的const和指针组合的相关文章

C++中的const和指针组合

在C++里,const修饰指针有以下三种情况 (1)指针常量:即指向常量的指针 const  int *p或者int const *p const在*前,,可以这样理解它的功能,因为const在*前,所以p指向的这个int变量对于*p来说是const的,即不能通过*p改变这个变量的值,但是变量本身可以随便改变自己的值.另外也可以改变p的指向. 例: int x=2; int y=3; const int *p=&x; *p=4;   //错误,不能通过*p改变变量的值 x=4;    //可以,

c++中的const与指针

const修饰符 使用const修饰变量时,该变量的值不可修改,因此需要初始化. 例如 const int s = 0: 此时s为值不可变的变量. 那么基于此,当const修饰指针时的情况有三种: (1)const int *p: 此时const修饰的是 *p 而非 p,因此,*p的值不可变,而p的值是可变的,所以可不对p进行初始化. 例如, int s = 0,t = 1; const int *p; p = &s; cout<<*p<<endl; p = &t;

比较常见的const与指针的组合情况

1.对于普通的const与基本类型组合,都是表示的是这是一个常量, const int a; int const a; 表示的意思是一样的,a是一个常量,不可改变 2.对于const与指针组合在一起,可以将const理解为内容,*理解为指针,誰在前面谁不能改变,誰在前面先读谁 const int *a;  等价于int const *a;    const在前面所以内容不可以改变,但是指针指向可以改变.也就是常量指针 如:int const *a=b;    这样就不能再出现*a=x等其他值了,

结合示例说明C++中const和指针结合时怎么理解

在之前随笔<C++中const使用要点(一)>中简单叙述了const int*.int* const和const int* const的区别,记住三句话就能在实际运用时用对,但是看书时发现了指针常量.常量指针这些名词,发现明白这些概念对阅读文章时还是比较重要的. 关键:const和指针结合时代码从右往左看 1.常量指针(const pointer) 概念:常量是形容词,也就是说常量指针是一个指针,用const修饰的指针. 按照代码从右往左(概念名词从左往右)的阅读顺序,不妨试着写一下. Ste

Objective-C中的const ,extern,static

一.const 1>对于const,记住关键的一点,它只是修饰右边的变量. 例如: - (void)viewDidLoad { [super viewDidLoad]; // const两种用法 // const:修饰基本变量p // 这两种写法是一样的,const只修饰右边的基本变量b const int b = 20; // b:只读变量 int const b = 20; // b:只读变量 // const修饰指针变量访问的内存空间,修饰的是右边*p1, // 两种方式一样 const

C++ 类中的const关键字

//类中的const关键字 #include<iostream> using namespace std; class Point{ public: //这个const关键字本质上修饰的是this指针 int GetX() const //====>int GetX(const this) { //因为this被隐藏,所以const关键字只好写在函数后面 //x++; //加上const关键字 报错 error C3490: 由于正在通过常量对象访问“x”,因此无法对其进行修改 //这个

C++总结:C++中的const和constexpr

C++中的const可用于修饰变量.函数,且在不同的地方有着不同的含义,现总结如下. const的语义 C++中的const的目的是通过编译器来保证对象的常量性,强制编译器将所有可能违背const对象的常量性的操作都视为error. 对象的常量性可以分为两种:物理常量性(即每个bit都不可改变)和逻辑常量性(即对象的表现保持不变).C++中采用的是物理常量性,例如下面的例子: 1 2 3 4 5 6 7 struct A {     int *ptr; }; int k = 5, r = 6;

const与指针修改const对象

我们都知道const对象作用是声明变量为常量,在程序中除非显示转换,否则无法修改. 本文针对显示修改的情况,提醒了一种隐式的错误,以及解决办法. 考虑下面的代码: #include<iostream> int main(){ const int a=0; int *p=const_cast<int*>(&a);//&a返回int *,const_cast<int*>显示转换为int*. *p =1; int b=*p; int c=a; std::cou

当const遇到指针

const 是c++中常用的修饰符,用它修饰的数据是无法改变的,所以当const遇到指针时就会出现几种情况: const int *p1; //代表了指向常量的指针变量,意思就是指针自身可以改变,他们可以指向其他地址,但是他们指向地址中的数据是不能改变的; int const *p2; //同上; int* const p3; //代表常量指针,意思是指针自身不能改变,但是他们指向地址中的数据是可以改变的; const int* const p4; //代表指向常量的常量指针,指针自身不能改变,