c语言——常量

常量

常量是在编译就知道的固定值,又称字面量。

字面常量

字面常量又可以细分为整形常量、浮点常量、字符常量,字符串常量。

整形常

在c语言中,十进制表达与平常无异,八进制则需要在数字前加上0,十六进制则需要在数字前加上0x。同时整形常量可以有后缀,u、l。u为unsigned(无符号类型),l为long(长整型)。

10十进制
010八进制(此处转化为十进制为8)
0x10十六进制(此处转化为十进制为16)
23u无符号整数
23ul无符号长整数

书写时除了以上规则还需要注意:

090八进制逢8进一,所以不存在出现8及以上数字的情况,十六进制同理
70uu不能重复后缀

实列:

#include <stdio.h>
int main()
{
 int a=13;
 long b=24l;
 unsigned long c=35ul;//实际上在这里后缀可有可无,因为数据会根据数据类型进行转换。
 return 0;
}

浮点常量

浮点常量有两种表现形式,一种是小数,另一种是指数形式。用小数来表达,就必须包含整数、小数点、小数。而指数形式要依靠e来表达(e跟在数字a后,同时e后面也要有一个数字n,意思为a*e的n次方)。

指数形式表达规则:在浮点数的指数形式中,指数可以是正数、负数或零。 当指数为正数时,表示的数值是基数乘以10的指数次方的结果;当指数为负数时,表示的数值是基数除以10的指数次方的结果;当指数为零时,表示的数值等于基数本身。

例:

11.4511用小数表达
114511e-5指数形式(114511*10^-5)
1.14511e1指数形式(1.14511*10^1)

字符常量

字符常量是指用单引号括起来的字符,该字符可以是普通字符,也可以是转义字符,或者通用字符

转义字符释义
\?在书写连续多个?时使用,防止他们被解析成三字母词
\’用于表示字符常量‘
\"用于表达一个字符串内的双引号
\\用于表示一个反斜杠,防止其被解释为一个转义序列符
\a警告符号,蜂鸣
\b退格符
\f进纸符
\n换行
\r回车
\t水平制表符
\v垂直制表符
\dddddd表示1~3个八进制数字   如:/130表示字符X
\xdddd表示2个十六进制数字  如:/x30表示字符0

字符串常量

字符串常量需要用双引号括起来,而字符串的组成可以有普通字符,转义字符,通用字符。

"hello world"含普通字符
"hello \nworld"含普通字符,转义字符

 

const修饰的常变量

const关键字可以作为前缀修饰变量,被修饰的变量称作常变量,他被赋予了常量的属性不可被更改,更准确的说应该是不能被直接更改。

#include<stdio.h>
int main()
{
 const int a=10;
 //a=20;(错误,被const修饰无法直接更改)
 int* p=&a;//可以间接修改
 *p=20;
 printf("%d\n",a);//此处打印结果为20
 return 0;
}

const在修饰指针时会出现两种情况,以int* p为例。若是是const在*的左边,此时const修饰的是*p。若是const在*的右边,那么修饰的是p。如果出现const int* const p,那么就是修饰*p也修饰p,即*p和p都不可直接更改。

注意:a的本质还是变量,不是常量,所以被称作常变量。

#define 定义的标识符常量

使用#define预处理器可以在程序中定义一个常量,它在编译时会被替换为其对应的值。

#define A 100
#include<stdio.h>
int main()
{
 printf("%d\n",A);//此处打印结果为100
 return 0;
}

枚举常量

枚举是一种创建常量符号的方式,而枚举常量代表该枚举类型的变量可能取的值。(可以理解为每个常量绑定一个名字)

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
enum Sex
{
	a,//可以为a指定数值,例如a=2,那么b,c依次为3,4
	b,
	c
};
int main()
{
	printf("%d\n", a);//结果为0
	printf("%d\n", b);//1
	printf("%d\n", c);//2
    //注:枚举常量的默认是从0开始,依次向下递增1的
	return 0;
}

#define定义的常量与const修饰的常量的区别

#define 定义常量是直接进行替换,而const 是通过修饰变量得到常变量。

#define 是直接替换,所以没有数据类型编译器也无法对其进行类型检查,而const 可以,因为const 修饰的常量具有类型信息。

#define 没有作用域限制,他在整个程序都有效,而cconst 有明确的作用域限制,只能在其定义的作用域使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值