C语言中const关键字用法汇总

关键字const“是用来定义常量的,而C语言中的宏定义#define也可以用来定义常量,先来说一下二者的区别:

        (1)#define的原理是对值在程序的预编译阶段进行替换,替换时并不会对值进行类型的检查

像下面这种情况编译是不报错的

        

 下面说一下const的几种用法;

1.const修饰局部变量

应用场景一般是:在程序中,不想让某一变量被修改,但是开发过程中有可能不下心将其修改了,这时候如果没有使用const对这个变量进行修改的话,等到程序出错再找就会很麻烦,而使用const修饰之后,在开发过程中仍然一不小心将其修改了的话,程序在编译的时候就会报出错误,就可以及时发现和定位错误;

const int a = 10;
int const b = 20;

以上两种写法是一样的,都是表示变量的值不能被修改了,在这里要注意一点,用const修饰变量时,要一块给变量赋上初值,否则就无法进行赋值了,而局部变量的值如果不赋初值的话,它将会是一个随机值,这将会很危险;

const char* str = "abcde";

上面这种写法是用const修饰常量字符串;

2.修饰全局变量

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


3.const修饰指针变量

使用const修饰指针变量的用法比较特殊,在这主要分为两种情况

        (1)常量指针,有两种定义的方式

const int * n;
int const * n;

        常量指针;const写在*前面(指针指向的值是一个常量),表示的是不能通过这个指针来改变指针指向的变量中的值,但是并不影响通过其他的方式来改变变量中的值,还有一点要注意的就是这个指针的指向是可以改变的;

        (2)指针常量

int * const n;

        指针常量:const写在*后面(指针本身是一个常量),表示的是指针指向的地址不能被改变,指针指向的地址中保存的数值之可以改变的

        (3)指向常量的常指针

const int * const n;

        是上面两种用法的综合(指针的指向不能改变,指针指向的地址中的值也不能改变)

4.const修饰函数参数(与const修饰指针用法类似)

        (1)防止通过该指针修改指针指向的地址中的内容

void StringCopy(char *strDestination, const char *strSource);

        其中 strSource 是输入参数,strDestination 是输出参数。给 strSource 加上 const 修饰后,如果函数体内的语句试图改动 strSource 的内容,编译器将指出错误

        (2)防止修改指针指向的地址

void swap ( int * const p1 , int * const p2 )

          指针p1和p2指向的地址都不能修改

        (3)以上两种用法的综合 

5.const修饰函数返回值

        如果给以“指针传递”方式的函数返回值加 const 修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const 修饰的同类型指针。

const char * GetString(void);    //声明函数
char *str = GetString();         //错误用法,编译报错
const char *str = GetString();   //正确用法,用同类型变量进行接收

    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值