ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C89:论常量(const)

2019-07-03 09:40:45  阅读:184  来源: 互联网

标签:const 常量 int C89 修饰 指针 变量


一.Const常量

1.作用

Const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的

用来提高程序的安全性和可靠性(其实我一般都觉得可加可不加,但是加了代码当然更好啦)

它推出的初始目的是为了取代预编译指令,因为const定义的常量在程序运行中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝

非Const类型可以赋值给Const类型,而Const类型不能赋值给非Const类型
Const修饰的数据类型必须赋初值

 

2.修饰内置类型变量

//(1)基本类型
int A;            //变量
const int a=1;    //常量
a=2;              //错误,常量不可变
 
int const b=2;    //常量
b=3;              //错误,常量不可变
 
 
 
//(2)指针判断const在*左边还是右边结合
const int* p=&A;            //常量数据,变量指针
int const* p=&A;            //常量数据,变量指针
p=&a;                       //正确,变量指针可以变
*p=a;                       //错误,常量数据不能变
 
 
int* const p=&A;            //变量数据,常量指针
p=&a;                       //错误,常量指针不能变
*p=a;                       //正确,变量数据可以变
 
 
const int* const a=&A;      //常量数据,常量指针
a=&a;                       //错误
*a=a;                       //错误 

 

3.修饰函数参数

//值传递
void A(const int a){     //因为是两块不同的内存,只能锁定函数内的参数变量内存无法修改
    a=3;                 //错误,无法进行修改
}  
 
//引用传递
void A(const int& a){    //引用的原来的数据内存,该内存的值不能变
    a=3;                 //错误,无法进行修改
}  
 
 
//指针传递
void A(const int* a){    //指向的数据不能变,表明该指针无法修改指向内存的值
    int b=1;
    a=&b;        //正确,传递进来的指针变量可以变
    *a=2;        //错误,传递进来的指针变量所指向的值不能变
}  
 
//注意:指针传递的本质也是值传递,任何对形参的指针变量的改变都不会影响到实参的指针变量,只有对形参的指针变量所指向的内存进行修改,才会影响到实参的指针变量所指向的内存
void A(int* const a){
    int b=1;
    a=&b;        //错误,传递进来的指针变量不能变
    *a=2;        //正确,传递进来的指针变量所指向的值不能变
}

 

4.修饰返回值

//值传递
const int a(){}      //无意义,返回值加上常量对形参和实参并不会有任何作用和改变
 
//引用传递
const int& a(){}    //会报警告,不建议这么写
 
 
//指针传递    
const int* A(const int* p){    //用常量指针做返回值,用来接收的指针也必须是常量指针
    return p;
}
 
int B(){
    int data=5;
    const int* p=&data;
    p=A(p);    //返回常量指针
}
 
int* const A(){...}  //无意义,这么写对形参和实参并不会有任何作用和改变
                     //因为指针变量被返回之后,自身的改变已经无意义,重要的是它指向的内存是不是常量
 
 
//注意,非成员函数不允许用const修饰函数
int* A()const{...}    //错误,普通函数不能用const进行限定
 
//注意,const int*无法转换为int*,常量指针无法转换为变量指针
//但是,int*可以转换为const int*,变量指针可以转换为常量指针

 

5.修饰成员函数

注意:const修饰成员函数这个功能只有在C++有

int A() const{}    //错误,普通函数无法加上限定符,只能修饰成员函数
 
 
class A{
    
public:
    
    //对调用的成员变量和成员函数进行限定
    //const修饰的成员函数不能修改任何成员变量(除了mutable修饰的变量)
    //const修饰的成员函数不能调用非const成员函数,因为非const成员函数会修改成员变量
    void a()const;
    
 
};

 

标签:const,常量,int,C89,修饰,指针,变量
来源: https://www.cnblogs.com/k5bg/p/11124464.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有