C/C++ 常量指针,指针常量

1 篇文章 0 订阅

在这里就不再重复C/C++ 常量指针,指针常量的概念了,以下以一个例题作为讲解,

题目是华为的一个选择题:

刚开始我一直以为答案是C,D一样,但是经过分析后,我产生了较大的困惑,希望能得到大神的指导:

个人觉得A,B是等价的同时C,D也是等价的。
A,B中,const位于*的左边,表示指针所指向的对象是常量,不能更改,但是指针是可以更改的,比如可以进行++,--等操作。
相反的若const位于*的右边,表示指针本身不能更改,不能进行++、--、移位等操作,但是指针所指向的对象可以更改。
下面举个例子:(程序中注释的语句都是错误的语句)
#include <iostream>
using namespace std;

 
int main()
{
	int a=5;
	int b=10;
	int c=20;
	cout<<&a<<endl;
	cout<<&b<<endl;
	cout<<&c<<endl;
	const int *p1=&b;
	p1++;
//	*p1=20;
	int const *p2=&b;
	p2++;
//	*p2=20;
	const *int p3=&b;
	p3++;
//	*p3=20;

	int * const p4=&b;
	
//	p4++;
	*p4=100;

	const int * const a1=&b;
	int const * const a2=&b;
//	a1++;
//	a2++;
//	*a1=200;
//	*a2=100;



	cout<<*p1<<" "<<*p2<<" "<<*p3<<" "<<endl;

	return 0;
}

运行结果:

程序中,变量a,b,c存储在栈中,存储的地址按低地址方向扩展。
const int *p1, int const *p2, const * int p3都指向b的地址,由以上可知p1,p2,p3都是指向常对象的指针,即指针所指向的对象
不能更改,但指针可以更改,如进行++操作。进行++以为操作后,指向变量a的地址,所以进行解引用(*)时输出变量a的值。但是在定义p3的时候出现了一个警告://
: warning C4518: 'int ' : storage-class or type specifier(s) unexpected here; ignored
而对于指针p4,int * const p4=&b,*位于const的左边,const修饰的是指针p4,即指针不能改变,但是可以改变指针所指向的对象。

同理const int * const a1=&b;,int const * const a2=&b;是指向常量的常指针,即指针本身和其指向的对象都不能更改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值