指针详解系列2-常量指针与指针常量

这一章我们详解一下指针的一个修饰符—const。
Const修饰符的不同位置,表示的不同的作用,定义如下:
char * const Ptr_ConstChar = “a”;
const char * pConstChar_Ptr;
const char * const pConstChar_ConstPtr = “ab”;
如何识别和记住这些差异,关键点就看const的位置,记住一点,它总是修饰的它后面紧挨着的内容。Const的意思就是固定,不能改变的意思(专业术语叫常量)。

解读1:char * const Ptr_ConstChar = “a”;

这是一个常量指针,const是修饰Ptr_ConstChar变量的,说明该指针变量为const类型,表示其本身不可以被修改。但是它指向的内容可以通过这个常量指针去修改。
它的初始化也不能通过赋值方法,只能通过定义的时候初始化。

解读2:const char * pConstChar_Ptr;

这是一个指针常量,所指向的对象为字符类型的常量,const 是修饰char类型标识符的,它说明该变量本身可以修改(可以用不同的char类型变量赋值),但是不能使用该变量去修改所指的对象,只能使用它来访问所指向的对象。
在程序运行期间保持不变,即不能放在赋值符合的左边,数组名就是一个指针常量的特例。
常见的string类型操作的参数都是这样定义的,比如:
char *strcpy(char * __restrict /s1/, const char * __restrict /s2/)
第二个参数就是一个常量字符串,这样可以避免被误修改。

解读3:const char * const pConstChar_ConstPtr = “ab”;

一个指向常量数据的常量指针,两者皆不可以修改。和C++里面定义一个常量宏类似。
如下代码,分别测试了这三种类型的定义的差异和使用方法。

int TestPointer1(void)
{
	const char alpha[] = "12345";
	
	char * const Ptr_ConstChar = "a";		//常量指针
	const char * pConstChar_Ptr;			//指针常量
	const char * const  pConstChar_ConstPtr = "ab";	//指向常量数据的常量指针


	char a;
	
	
//	Ptr_ConstChar = alpha; //不能赋值,因为不能修改
//	Ptr_ConstChar = "a"; //不能赋值,因为不能修改
	a = *Ptr_ConstChar;		//可以访问指向的内容
	*Ptr_ConstChar = 1;		//可以修改指向地址的内容


//	*pConstChar_Ptr = 1;		//不可以修改指向的地址的内容
	pConstChar_Ptr = alpha;		//可以用数组去初始化
	pConstChar_Ptr = "a";		//可以用字符串去初始化
	pConstChar_Ptr++;			//可以被修改

	a = *pConstChar_ConstPtr;	//仅仅可以访问指向地址的内容
	
	return  a;
}

如果对一个char * const Ptr_ConstChar定义的指针进行赋值,会提示如下错误“表达式必须是一个可以编修的值”,说明Ptr_ConstChar是不可以修改的。
在这里插入图片描述
原创文章,欢迎转载,请注明来源,未经书面允许,请勿用于商业用途。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值