C语言中const关键字用法详解

C语言中const关键字用法详解一 const 定义 const 用于限定一个变量为只读

大家好,欢迎来到IT知识分享网。

一、const定义

const int MONTHS=12;//MONTHS在程序中只读不可更改,值为12 

二、const用法

1、说明值常量

值常量的说明一般放在头文件或者文件的开始部分,也可以放在类中进行说明

(1)说明符号常量,表明符号代表的是一个常量,语法格式:

<类型>const<常量名>=<表达式>,<常量名>=<表达式>…… double const PI=3.14; const double PI=3.14; 

(2)说明数组常量,语法格式:

<类型>const<数组名>[大小]={ 
   初值表}const<类型> <数组名>[大小]={ 
   初值表}double const test[3]={ 
   1,2,3}; const double test[3]={ 
   1,2,3}; 

2、const和指针

Const和指针的三种经典组合

const char *pc=”ABCD”;//指针PC所指向的地址可以变,但是所指向的那个值不能变 Pc[3]=’a’;//不合法,企图修改原来指向的常量 Pc=“WERT”;//合法指向另外一个常量 

const *的例子:(地址可变,地址对应的值不可变)

int b = 3, c = 5; int const *a = &b; cout<<*a<<endl; // 3 //*a = 6; 不能对*a进行修改,因为其值为const不可变 b = 6; //但是可以用b来修改 cout<<*a<<endl; // 6 
char *const pc=”ABCD”;//PC的值其实是一个地址,这就表示PC所保存的地址是不可以变的,但是这个地址对应的值是可以变的 Pc[3]=’a’; //合法,指针指向的对象可以修改 Pc=”QWER”; //不可以,指针的指向不可以修改 

*const的例子:(地址不可变,地址对应的值可变)

int b = 3, c = 5; int *const a = &b; //a = &c; 这一句是错的,因为a所指向的地址是不能变的 cout<<*a<<endl; // 3 b = 6; cout<<*a<<endl; // 6 

例如:

const char *const pc=”ASDF”; Pc[3]=’a’; //不合法,不能改变指针所指对象的值 Pc=”QWER”; //不合法,不能改变指针的指向 

3、const说明函数参数

const说明函数参数——用const修饰函数参数意味着传过来的实参在函数中是不能被修改的。一般情况下不需要,但是在用指针和引用传值的场合,为避免实参被修改,就用const修饰,更安全。

(1)防止修改指针指向的内容

void StringCopy(char *strDestination, const char *strSource); 
void swap ( int * const p1 , int * const p2 ) 

4、const说明函数返回值

const说明函数返回值——修饰函数的返回值,意味着该返回值不能被修改。如果传值并返回地址,const将保证该地址上的内容不会被改变。这就意味着该函数不能作为左值使用,在这种情况下,const通常也是与引用和指针一起使用的,该返回值只能被赋给加const 修饰的同类型指针。

const char *str = GetString(); 

5、修饰全局变量

全局变量的作用域是整个文件,我们应该尽量避免使用全局变量,因为一旦有一个函数改变了全局变量的值,它也会影响到其他引用这个变量的函数,导致除了bug后很难发现,如果一定要用全局变量,我们应该尽量的使用const修饰符进行修饰,这样防止不必要的人为修改,使用的方法与局部变量是相同的。

三、使用const的优点

#define PI 3.14159 //常量宏  const double Pi=3.14159; //此时并未将Pi放入ROM中 ......  double i=Pi; //此时为Pi分配内存,以后不再分配!  double I=PI; //编译期间进行宏替换,分配内存  double j=Pi; //没有内存分配  double J=PI; //再进行宏替换,又一次分配内存!  

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/139694.html

(0)
上一篇 2025-06-02 19:10
下一篇 2025-06-02 19:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信