天天看点

指针常量和常量指针的区别一、指针常量是什么?二、常量指针是什么?三、如何记忆和区别它们四 Test Yourself!

C++中指针常量和常量指针的区别

  • 一、指针常量是什么?
  • 二、常量指针是什么?
  • 三、如何记忆和区别它们
    • 1.字面上区别它们
    • 2.代码上区别它们
  • 四 Test Yourself!

指针常量 和 常量指针这两个词其实翻译得不是很合适,所以导致大家对这两个概念容易混淆,从英文角度去理解会更容易。

一、指针常量是什么?

指针常量是由英文

pointer to const

翻译而来的,看到英文,相信大家不会再搞不清楚它的意义,它代表着一个指向

const

类型变量的指针。

那么很明显,指针的指向是可以修改的,因为它只是个pointer,而指针指向的值是const,是不允许修改的。

二、常量指针是什么?

常量指针是由英文

const pointer

翻译而来的,

const

修饰的是

pointer

,说明指针是不可以修改的,因为

pointer

是常量,但指针指向的值是可以修改的。

三、如何记忆和区别它们

1.字面上区别它们

不管是常量指针还是指针常量,转换成英文都少不了const 和 pointer 两个单词。

  • 对于指针常量,指针-pointer,常量-const,拼在一起是pointer const,是不是很别扭,但是我们不改变两个单词的顺序,只在中间加上一个

    to

    ,就会变得很自然,pointer to const,它的意义也就显现出来了。const的是指针指向的值。
  • 对于常量指针,常量-const,指针-pointer,直接拼在一起,就成了const pointer,其意义也就显而易见了,const的是指针本身。

2.代码上区别它们

星号*前面的是对被指向对象的修饰,星号*后面的是对指针本身的修饰。

实例:

常量指针:

int main()
{
	//pointer to const 指针常量
	int a = 1;
	int b = 2;
	int const* p = &a;
	//*p = 2; error 指向的是常量,不可修改
	p = & b;
}
           

指针常量:

int main()
{
	//const pointer 常量指针
	int a = 1;
	int b = 2;
	int *const p = &a;
	*p = 2;
	p = & b;//error 指针是一个常量,不可修改指向
}
           

小技巧:我们可以先把int const p写下来,再决定星号*加在哪里

  • 如果是pointer to const,就写作int const* p,因为

    星号前是对被指向对象的修饰

    ,现在我们希望被指向对象是一个const。
  • 如果是const pointer,就写作int* const p,因为

    星号后是对指针的修饰

    ,现在我们希望指针是一个const。

四 Test Yourself!

下面6道题如果大家能准确说出中文或者英文意义,那么就算过关啦~~

①const int p;

②const int* p;

③int const* p;

④int * const p;

⑤const int * const p;

⑥int const * const p;

1 整形常量p; const int

2 指向整形常量的指针p; pointer to const int

3 指向整型常量的指针p; pointer to const int

4 指向整形的常量指针p; const pointer to int

5 指向整形常量的常量指针p; const pointer to const int

6 指向整形常量的常量指针p; const pointer to const int

以上就是我个人的一些简单的理解,希望能帮助到大家,如果有问题或者错误,欢迎大家在评论区指出,如果看到一定会回复或者及时改正,谢谢朋友们~

参考链接:如何理解常量指针与指针常量?

继续阅读