常量的基本介绍
C语言的常量包括:整数常量、浮点数常量、字符常量和字符串常量。
整数常量的表达方法有以下几种:
十进制表达式
和普通数字的表达方法一致。例如:13,28,-52,-1000等等。
十六进制表达式,以0x开头。
例如:0xA1,0xC8,-0x20,-0x500等等。
八进制表达式,以0开头。
例如:032,-011,081(错误)0开头的常量看上去好像是十进制,但是其实是八进制,八进制中只有0-7之间的数字,8和9都错误代码,C语言并没有提供二进制常量表达式。
指数形式
由十进制a,加阶码标志”e”或”E”以及阶码n组成
- 注意:
-
阶码n可以带符号,只能为十进制整数;
-
“e”或”E”的两边必须有数
-
当n为正数时,正数可以忽略
-
同一个整数有多种表示形式
浮点数常量
是带小数点的数字,表达式的中必须含有小数点,即使小数部分是0也要缺省带小数点。主要有两种表达式
a) 单精度浮点数
尾部带f的浮点数代表是单精度浮点数。例如:0.5f,88.2f,-55.0f 等等。
b) 双精度浮点数
尾部不带f的浮点数代表是双精度浮点数。例如:0.88,99.5,-111.356等等。
一般认为双精度浮点数比单精度浮点数表达的范围要大很多,包括整数部分和小数部分,双精度表达的数字长度要大很多。
1、const 修饰的常变量:此变量不能被修改
#include<stdio.h>
int g = 100;
int main() {
const int a = 10;
{
int b = 20;
printf("%d\n", b);
printf("l:%d\n", a);
printf("g:%d\n",g);
}
//printf("%d\n",b);未定义b
a++;//当变量a被const修饰时会报错: 表达式必须是可以修改的左值
printf("2:%d\n",a);
printf("g:%d\n",g);
return 0;
}
2、define定义的标识符常量
#include<stdio.h>
#define MAX 100
int main() {
int arr[MAX];
return 0;
}
3、枚举常量
#include<stdio.h>
enum SEX {
MALE,FEMAILE,SECRET
};
int main() {
enum SEX s = MALE;
printf("%d\n", MALE);
printf("%d\n", FEMAILE);
printf("%d\n", SECRET);
return 0;
}
4、字符常量
‘a’,‘b’ , ‘c’
5、字符串+转义字符+注释+控制符
#include<stdio.h>
int main() {
char arr1[] = "abc";
char arr2[] = {'a','b','c'};
printf("%s\n", arr1);
printf("%s\n",arr2);
return 0;
}
注意看区别字符串和字符的区别:
5.1、字符常量
-
在单引号中的字符不能是”’”和反斜杠”\”;
-
字符常量只能是单个字符不能是字符串,例如:’小柯南’就是错误的;
-
字符可以是字符集中的任意字符;
字符常量是用单引号将一个字符括起来的构成,每种被括起来不同的字符代表一个不同的数字(就如同每个学生有不同的名字,而且还有个不同的学号一样)。所有字符与数值的对照表就是及ASCII码表。
ASCII码表:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D1wCgaZL-1636034687434)(C:\Users\21269\AppData\Roaming\Typora\typora-user-images\image-20211001085409238.png)]
5.2、字符串常量
由一对双引号括起来的字符集合。例如,以下都是合法的字符串常量:
“how are you doing?”;
“我是小柯南”;
“a”;
字符串是唯一的一种存在与内存空间上的常量,它是一个内存上的某个地址。字符串内所有的字符依次存储在内存中一块连续的区域内,并且把空字符’\0’自动附加到字符串的尾部作为字符串的结束标志。因此,字符个数为n的字符串在内存中应占(n+1)个字节。
使用printf
可以输出字符串,例如:printf("how are you doing?")
;
字符串常量与字符常量的对比
a)字符常量是由一对单引号括起来的单个字符,而字符串常量是一对双引号括起来的字符集合;
b)字符常量本质上是一个数字,这个数字对应了ASCII表内的一个字符;
c)而字符串常量本质上是一个字符集合的内存地址,打印时从头部一直遍历到结尾符结束;
d)不能将字符串与字符常量混淆,字符常量可以赋值给字符变量或其他整型变量;
e)不能把一个字符串常量赋给一个字符变量或者其他整型变量。
5.3、转义字符表
转义字符 | 意义 | ASCII码值(十进制) |
---|---|---|
\a | 响铃(BEL ) | 007 |
\b | 退格(BS) ,将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下页开头 | 012 |
\n | 换行(LF ) ,将当前位置移到下一行开头 | 010 |
\r | 回车(CR) ,将当前位置移到本行开头 | 013 |
\t | 水平制表(HT) (跳到下一个TAB位置) | 009 |
\v | 垂直制表(VT) | 011 |
\ | 代表一个反斜线字符\ | 092 |
’ | 代表一个单引号(撇号)字符 | 039 |
" | 代表一个双引号字符 | 034 |
? | 代表一个问号 | 063 |
\0 | 空字符(NULL) | 000 |
\ddd | 1到3位八进制数所代表的任意字符 | 三位八进制 |
\xhh | 1到2位十六进制所代表的任意字符 | 二位十六进制 |
注意:
1.所有的ASCII码都可以用“\”加数字(2位的16进制数字或3位的8进制数字)来表示。
2.要实现非十进制每位的输出,用本数多次除以对应基数即可。
5.4、注释
// //单行注释
/**/ //多行注释