C语言中const的用法-创新互联

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

创新互联建站致力于成都做网站、网站制作,成都网站设计,集团网站建设等服务标准化,推过标准化降低中小企业的建站的成本,并持续提升建站的定制化服务水平进行质量交付,让企业网站从市场竞争中脱颖而出。 选择创新互联建站,就选择了安全、稳定、美观的网站建设服务!

文章目录
  • 一、const是什么?
  • 二、const的使用
    • 1.基本使用
    • 2.const和指针
    • 3.const和#define的区别



提示:以下是本篇文章正文内容,下面案例可供参考

一、const是什么?

const是C语言中保留的一个关键字,用来定义常量,如果一个变量被const修饰,那么它的值就不能被改变。使用符号常量写出的代码更容易维护;一些指针常常是边读边移动,而不是边写边移动;许多编程规范对于函数参数会强制要求只读不写,在这些情况下,都需要借助const实现。

二、const的使用 1.基本使用
  • 举例:

const是constant的缩写,意思是“恒定不变的”,它是定义只读变量的关键字。用const定义只读变量的方法很简单,就在定义变量时前面加const即可,例如:用一个变量来表示班级的大人数,或者表示缓冲区的大小。为了满足这一要求,可以使用const关键字对变量加以限定:

const int MaxNum = 100;  //班级的大人数
  • 基本格式:

我们经常将 const 变量称为常量(Constant)。创建常量的格式通常为:

const type name = value;

const 和 type 都是用来修饰变量的,它们的位置可以互换,也就是将 type 放在 const 前面:

type const name = value;

但我们通常采用第一种方式,不采用第二种方式。

  • 实例应用

由于常量一旦被创建后其值就不能再改变,所以常量必须在定义的同时赋值(初始化),后面的任何赋值行为都将引发错误。一如既往,初始化常量可以使用任意形式的表达式,如下所示:

#includeint getNum(){return 100;
}
int main(){int n = 90;
    const int MaxNum1 = getNum();  //运行时初始化
    const int MaxNum2 = n;  //运行时初始化
    const int MaxNum3 = 80;  //编译时初始化
    printf("%d, %d, %d\n", MaxNum1, MaxNum2, MaxNum3);
    return 0;
}
结果为:100,90,80
  • 错误例子

用const修饰的值就不能被修改了,否则会发生错误

const int MaxNum = 100;  //班级的大人数
MaxNum = 90;  //错误,试图向 const 变量写入数据
2.const和指针
  • 常量指针

常量指针是指针指向的内容是常量,可以有两种书写方式:

const int *m;
int const *m;

注:
a.常量指针说的是不能通过这个指针改变变量的值,但是还是可以通过其他的引用来改变变量的值的。

int a=10;
const int* m=&a;
a=11;

b.常量指针指向的值不能改变,但是这并不是意味着指针本身不能改变,常量指针可以指向其他的地址。

int m=1;
int n=2;
const int* a=&m;
a=&n;
  • 指针常量
    指针常量是指指针本身是个常量,不能在指向其他的地址,书写方式如下:
int *const n;

注:指针常量指向的地址不能改变,但是地址中保存的数值是可以改变的,可以通过其他指向改地址的指针来修改。

int a=5;
int *p=&a;
int* const n=&a;
*p=8;
  • 指向常量的常指针

当然,指针本身和它指向的数据都有可能是只读的,下面的两种写法能够做到这一点:

const int * const p4;
int const * const p5;

const 和指针结合的写法多少有点让初学者摸不着头脑,大家可以这样来记忆:const 离变量名近就是用来修饰指针变量的,离变量名远就是用来修饰指针指向的数据,如果近的和远的都有,那么就同时修饰指针变量以及它指向的数据。

3.const和#define的区别

1)const定义的常量时,带类型, define不带类型。
2)const是在编译、运行的时候起作用:而define是在编译的预处理阶段起作用。
3)define只是简单的替换,没有类型检查。简单的字符串替换会导致边界效应。
4)const常量可以进行调试的, define是不能进行调试的,主要是预编译阶段就已经替换掉了,调试的时候就没它了。
5)const不能重定义,不可以定义两个一样的,而define通过undef取消某个符号的定义,再重新定义。

#include#define A 1
#define B (A+3)   //
#define C A/B*3 //  
//const不能重定义,不可以定义两个一样的,而define通过undef取消某个符号的定义,再重新定义 
const double PI=3.14;
//const double PI=3.145;
#define PI2 3.14
#undef PI2 //  取消PI2 的定义
#define PI2 3.145
int main() {//
    //分析过程
    //#define 就是一个简单的替换!!!
    //C 其实是  A/A+3*3 = 1/1 + 3 * 3 = 1 + 9 = 10
    //C 其实是  A/(A+3)*3 = 1/(1+3) * 3 = 1/4 *3 = ?
    double d1 = 1.0/4 *3 ; // 0.25 * 3  = 0.75
    printf("\nc=%.2f", C);// 问 c = ? 
    printf("\nd1=%.2f", d1);
    return 0;
}
结果为:c=0.00
       d1=0.75

6)define可以配合#ifdef、ifndef,#enndif来使用,可以让代码更加灵活,比如我们可以通过#define 来启动或者关闭调试信息。

#include#define DEBUG
int main() {#ifdef DEBUG //如果定义过 DEBUF
        printf("ok, 调试信息");
#endif
#ifndef DEBUG //如果没有定义过 DEBUF
        printf("hello, 另外的信息");
#endif
//      printf("%d",n);
        return 0;
}
结果为:ok, 调试信息

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


本文题目:C语言中const的用法-创新互联
本文链接:http://abwzjs.com/article/dpdiod.html