C++指针基础(四)--用const修饰指针

  1. 如果用const修饰普通变量,那么普通变量就变成了只读的,相当于常量。
    在程序的任何地方都可以声明。
    语法:const 数据类型 常量名=值;
    特点:在程序中不允许修改常量的值,否则编译会报错。
  2. const修饰指针的方式有三种:常量指针,指针常量和常指针常量,实际开发中,实际上之后用到第一种,常量指针。
    (1)常量指针
    语法:const 数据类型* 变量名
    特点:不能通过解引用的方法修改内存地址中的值,但是用原始的变量名是可以修改的。

    例:用解引用的方式修改会报错
    int a = 3, b = 8;
    	const int* p = &a;
    	cout << "a=" << a << ",*p=" << *p << endl;
    
    	//常量指针的特点:不能通过解引用的方法修改内存地址中的值,但是用原始的变量名是可以修改的。
    	*p = 10;//此行修改常量指针所指地址中的值,因此此行报错
    
    	system("pause");

     例:可以使用原始变量修改
     

    int a = 3, b = 8;
    	const int* p = &a;
    	cout << "a=" << a << ",*p=" << *p << endl;
    
    	//常量指针的特点:不能通过解引用的方法修改内存地址中的值,但是用原始的变量名是可以修改的。
    	/*
    	*p = 10;//此行修改常量指针所指地址中的值,因此此行报错
    	*/
    
    	//用原始的变量名是可以修改的。
    	a = 13;
    	cout << "a=" << a << ",*p=" << *p << endl;
    
    	system("pause");
    	return 0;

(2)注意(常量指针的应用场景)
(a)指向的变量(对象)可以改变,之前指向变量a的,后来可以改为指向变量b
例:

//注意(a):指向的变量(对象)可以改变,之前指向变量a的,后来可以改为指向变量b
	p = &b;
	cout << "b=" << b << ",*p=" << *p << endl;

(b) 一般用于修饰函数的形参,表示不希望在函数里修改内存地址中的值
 

void func(const int* no, const string* str)
{

	//这两句会报错,因为常量指针不允许通过解引用的防止修改地址中的值
	/*
	*no = 8;
	*str = "我是一只小小鸟";
	*/
	

	cout << "亲爱的" << *no << "号,我是" << *str << endl;
}

 (c)如果常量指针用于形参,虽然指向的对象可以改变,但是这么做没有任何意义
 (d)如果形参的值不需要改变,建议加上const修饰,程序可读性更好,因为其他人看到函数声明,就能明白你的意图。
(2)指针常量
语法 :数据类型* const 变量名
特点:指向的变量(对象)不可改变

注意:(实际开发中几乎不用)
(a)在定义的同时必须初始化,否则没有意义
(b)可以通过解引用的方式修改地址中的值
例:

int* const p1 = &a;//p1是指针常量,声明的时候必须初始化,否则会报错
	*p1 = 6;//指针常量可以通过解引用的方式改变地址中的值
	cout << "a=" << a << ",*p1=" << *p1 << endl;

 (3)常指针常量(在实际开发中没什么用)
语法:const 数据类型* const  变量名
特点:指向的变量(对象)不可改变,不能通过解引用的方式改变内存地址中的值。

总结:
常量指针:指针指向可以改,指向的值不可以改----------------指向常量的指针

指针常量:指针指向不可以改,指向的值可以改--------------指针是常量

常指针常量:指针指向和指向指针的值都不可以改

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值