const关键字

                                    const关键字

写过一些知识点的文章,但是写的都比较粗糙,总是自己学会了就简略的写一下,自己都看不下去了,从今天开始,认真的写每一篇文章,尽量使像我第一样的的菜鸡也可以理解、明白。

 

下面主要介绍const关键字的四个作用。   ps:不保证所说的每一话都正确   请大佬略过  小白可以看看。

1:const 和普通变量                        2:const 和指针

3:const 和函数                               4:const 和类及其对象

1.const 和普通变量  

        这个是最简单最容易理解的,在声明变量时,在前面加上一个const  这样就定义了一个常量,比如:const  float pi = 3.14或者float const pi = 3.14 ,两者一样,此时pi就成为了一个常量。  

      2. const和指针

      这个主要包含两个名词 :指针常量、常量指针

      我在初学的时候,一直记不清或者说记混这两个名字,今天在这里分享一下记忆的方法。简单点说,谁在前面谁就是不可改变的,比如说:常量指针,常量在前面,这个就是const在修饰那个常量,常量就不能改变,这个指针的值可以改变,在下面我会附上代码 进行展示。指针常量类似。正式一点说就是const这个关键字修饰谁,谁就是常量,就是不能被改变。

	const int *p = &a;   常量指针一旦初始化完成,它的值,也就是它所放在指针中的地址就不能变
        int const *p = &a; //两句话是等价的  此时p都是一个常量指针  
	*p = 50; //这样就是错误的   p是常量指针  其指向的值时不能被改变的

这里在啰嗦一句  ,我们要搞明白一件事,那就是const是C/C++的修饰符,他修饰谁,谁就不是可变的。比如:

                                                                   const int *p = &a;   
                                                                   int const *p = &a;

这两条语句作用是一样的,都是定义了一个常量指针p,指向常量a。  大家看  const无论放在int前面和int后面他都是和 int 挨着,和指针 p 之间还隔着一个 * 呢!  所以这时候const修饰的是 int  整形  也就是 a,所以a是不能被改变的。

下面同样理解一下指针常量就可以了:

        int a = 20;
	int b = 50;
	int * const p = &a;//定义一个指针常量  
	p = &b; // 错误 因为p是一个常量  所以不能再被赋值了

这里需要注意一下,定义常量是需要为其赋值的,比如const int a ;这样是不对的,必须const int a = 20;同样定义一个指针常量的时候,也必须为这个指针常量赋值 ,比如int * const p ;这样不对,int * const p = &a;就正确了。其实const和指针的关系理解到这里基本就可以了。嘿嘿!

3:const 和函数  

const关键字主要和三种函数有关系。

1:第一种: 采用  “值传递”的函数     const  int fun()   

在一个C文件中,除了main函数 我们可能还会写各种各样的功能子函数。下面附上代码 清楚说明。

# include  <iostream>
 const int fun()
{
	return 5;
}
void main()
{
	int a;
	a = fun();
	
}

一开始在这个问题上我想了很久,怎么也没明白这种 函数加上一个const有什么作用??
哈哈,后来找到,这个东西就是没啥卵作用!!
如果函数返回值采用“值传递方式”,由于函数会把返回值复制到外部临时的存储单元中,
加const 修饰没有任何价值。const int fun() 这个const 是没有任何作用的!!

第二种:采用 “指针传递”的函数   const int * fun()

这里的const  是有作用的   ,就是这个返回的常量指针必须赋值给一个常量指针  。如下

# include  <iostream>
 const int  * fun()
{
	int a = 5;

	return &a;
}
void main()
{
	const int *p ;
	p = fun();   //正确

	int * q;
	q = fun(); //错误  
}

 第三种:int fun (const  int  a ) const 修饰形参

这种比较简单,在相应的函数中不能改变形参的值。

4:const和类及其对象。

这里const和类的关系就是在类中定义函数的时候,在类中定义的函数后面加上一个const   比如:  void fun ()const我们这里可以把这种函数叫做 const 成员函数。

这里const类对象 只能调用const成员函数 ,非const对象可以调用各种成员函数。如下

# include  <iostream>
using namespace  std;
class  Ponit 
{
public:
	Ponit(float a ,float b );//构造函数  初始化 变量
	float get_x() const;//获取x的值
	float get_y() const;//获取y的值 
	void  move(float a, float b);
	void  printf1() const;
private:
	float x;
	float y;
};

 Ponit :: Ponit (float a = 0, float b = 0):x(a),y(b)
{
	
}
 float Ponit::get_x() const
 {
	 return x;
 }
 float Ponit::get_y() const
 {
	 return y;
 }
 void Ponit::move(float a, float b)
 {
	 x = a;
	 y = b;
 }
 void Ponit::printf1() const
 {
	 printf("(%f,%f)\n", x, y);
 }
 void main()
 {
	 const Ponit a;//定义一个常量对象  只能调用 const成员函数
	 Ponit b;//定义Ponit  对象  可以调用类中所有的函数 
	 b.move(5, 6);
	// a.move(5, 6);//错误  const  对象 只能调用 const  函数 
	 a.printf1();
	 b.printf1();
 }

目前只掌握了这么多 ,如果有什么问题,欢迎随时 指出。

如果看了有一点点收获,麻烦点个赞,点个关注,  谢谢  嘿嘿 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值