c语言const 编译,C语言const关键字学习

在C语言中const关键字用来修饰一个变量,它限定一个变量不允许被修改。

const int max_size = 5;

看起来使用const修饰的变量,和使用宏很类似,为何不直接使用宏呢?

#define MAX_SIZE (5)

这是因为和宏比起来:

1. const修饰的是一个变量,所以会在代码编译阶段进行语法检查。

而宏只会在预编译阶段进行简单的替换动作;

2. 使用const修饰的是一个变量,具有具体的数据类型,所以编译器会进行类型检查。

3. 可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。

以常见的strcpy函数为例,

#include

char *strcpy(char *dest, const char *src);

使用const修饰了char *src参数,这表示在strcpy函数内部是不能向src这个char指针指向的位置写入数据的。

如果有写入数据,则编译器就会报错。

4. 可以节省内存空间,避免不必要的内存分配。

因为const修饰的是变量,所以在内存中只有一份拷贝;

而宏定义只会在预编译阶段进行简单的替换动作,所以使用宏的地方都会被替换掉。

关于使用const的几个问题:

1. const int count = 10;

int array[count] = {0};

以上,编译器会报错。

原因是ANSI C规定数组定义时长度必须是常量;

而const修饰的仍然是一个变量。

2. const修饰内容的规则,特别要注意的是const修饰指针时很容易困惑人的.

(1)const char* src;----这里const修饰的是*src,即src指针指向的内容不能被修改,但指针本身可以随意指向;

(2)char* const src;----这里const修饰的是src这个指针,src指针指向了这个地方就不能动了,但是内容可以被修改。

所以关键点是:const只修饰其后的变量。

在(1)中,const修饰的变量是*src,*src是char类型数据;

在(2)中,const修饰的是src,src是char*类型数据。

再一次感觉到存储器空间布局的重要性,后面一定要找时间学习这一块。

推荐阅读:

0b1331709591d260c1c78e86d0c51c18.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值