第三章:C语言学习之常量

C语言学习之路

第一章 初识C语言
第二章 变量
第三章 常量


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


前言

学习完第二章后,我们已经对C语言中变量的一系列知识有了初步的认知,但是在生活中,除了变量外,我们还知道有很多量是不变的,例如:一周有七天,一天有24小时等常量。那么这些常量,在C语言中又是如何实现的呢?通过第三章的学习,我们将会对常量的知识有初步的认知。


一、常量

1、字面常量:

include<stdio.h>
int main()
{
3.14;
10;
‘a’;
return 0;
}

字面常量就是直接在编译器中书写某些数值或者字符,但是我们不难发现,这些数字写上去以后,貌似并没有什么用处,因此,这种方式了解即可。

2、const修饰的常变量

const int a=10;

变量被const修饰后,该变量将无法被修改,即无法给该变量赋值。但是我们这里需要注意的是,即使该变量被const关键字修饰了,但是依旧是一个变量。接下来,我们将证明这件事:

const int a= 10;
int arr[a]={0};//此时编译器会报错

当我们在主函数的函数体内输入了这个初始化数组后,我们会发现下图中的错误:
在这里插入图片描述
翻译过来即”表达式中必须是一个常量。“
由此我们便能够发现,即便有了const修饰后的变量,依旧是变量,仅仅是其具备了常量的性质,数值无法被修改。

3、#define 定义的常量和宏

(1)代码示例:

#define WEEK 7;//定义常量
#define ADD(x,y)  x+y;//定义宏

#include<stdio.h>
int main()
{
	int A = WEEK;
	int sum = ADD(1, 2);
	printf("一周有%d天\n", A);
	printf("1+2=%d", sum);
	return 0;
}

(2)语法:

#define 常量名称 常量值
#define 宏的名称 宏的表达式

(3)详解:

这两种方式其实在本质上是相同的。

定义常量很好理解,其实就相当于给一个特定的常量值起了一个新的名字,从而使得这个常量有了特定的意义。那么这句话带给我们的意义其实就是,虽然其名字很像一个变量名,但是它的本质依旧是一个常数。不能把他当变量使用。

例如:

#define DAY 24;
int main()
{
  printf("一天有%d小时\n",DAY);//编译器会报错(VS 2022)
  return 0;
}

在这里插入图片描述
这里报错就是因为我们把该常量当作了变量使用,造成了错误。
那么如何解决呢?方法很简单,仿照上文的代码示例,将该常量赋值给一个变量,在打印即可。

那么如何理解定义宏呢?
定义常量相当于给一个常量值起了一个新的名字,那么定义一个宏,其实就是给一组操作起了一个名字。这种方式非常像后续提到的函数。

4、枚举常量

(1)代码示例:

enum SEX
{
//枚举出了一种变量的未来所有可能的取值
  man,
  woman
};
int main()
{
  enum SEX person1=man;
  enum SEX person2=woman;
  return 0;
}

(2)语法:

enum 常量名
{
  该常量未来所有可能的取值;
}
int main()
{ 
  enum 常量名 新名称(类似于变量名) = 可能取值;
  return 0;
}

(3)代码详解:

枚举常量和上述常量最直接的不同之处在于,该常量的可能取值不仅仅有一种,而可以有很多种,例如代码中提到的,人的性别可以是男也可以是女。

其次,在使用枚举常量的过程中,我们发现,倘若遮住关键字enum 此时的语法形式非常类似于第二章中提到的变量的设置。同时,这种方式非常像后续所提到的结构体。

因此,我们可以换一个角度理解,枚举常量其实就是由几个刚才提到的,define定义的常量组成的。只是这些常量名之间构成了一些关联。

我们进一步思考,发现,枚举常量的定义,非常类似于C/C++中的结构体,以及C++中特有的功能:类。

我们再继续深挖:

enum SEX
{
  man,// #define man 0
  woman//#define woman 1
};
int main()
{
  printf("%d\n",man);
  printf("%d\n",woman);
  return 0;
}

执行上述代码,我们会发现如下结果:
在这里插入图片描述
我们会发现,这些枚举常量从上到下,默认从0开始,赋予一个常量值。那么我们可以在定义枚举常量的时候,对其赋值。但是,在定义之外的代码块不能对其再次定义。

enum SEX
{ 
   man=1;//正确,此处是赋予了初始值
   woman;
}
int main()
{ 
  woman=2;//错误的写法,因为无法给常量再次赋值
  return 0;
}

也就是说,我们在定义枚举常量的时候,所有未来可能的情况,编译器都默认采用了类似于宏常量的方式对其进行了赋值,此时我们可以给其定义我们需要的初始值。但是在其余地方无法再次赋值。

二、总结

通过这一章的学习,我们能够对常量的四种形式,有了初步的理解。同时,我们对C语言的学习又迈进了一小步。
我这个人走得很慢,但我从来不后退 。
——林肯

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值