菜鸟转行嵌入式_(第3天)C语言基础_常量

212 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1.常量

常量是指在程序运行期间其数值不发生变化的数据 常量一般在代码中直接出现,用于给变量进行赋值,常量不允许进行修改

常量:整型常量、浮点型常量、字符串常量、字符常量、标识符常量(宏)

10 1 1.23 ‘a' "hello world"

1.1 整型常量

整型常量通常简称为整数。

整数可以是十进制数、八进制数和十六进制数。例如,十进制的数值3356可以有下列二种不同的表示形式:

八进制数 06434

十六进制数 0xd1c

1.2 浮点常量

浮点常量又称为实数,一般含有小数部分。

在C语言中,实数只有十进制的实数,分为单精度和双精度。实数有两种表示方法, 即一般形式和指数形式。

一般形式的实数基本形式如下: 例如, 3.5 , -12.5, 3.1415926

1.3 指数常量

指数形式的实数一般是由尾数部分、字母e或E和指数部分组成。 当一个实数的符号为正号时,可以省略不写,其表示的一般形式如下:

1.176e+10 表示 1.176×1010

-3.5789e-8 表示 -3.5789×10-8

通常表示特别大或特别小的数

1.4 字符常量

字符常量是指一个单一字符, 其表示形式是由两个单引号包括的一个字符。

A’, ‘a’, ‘Q’, ‘0’, ‘9’, ‘+’, ‘:’, ‘?’, ‘$’ 都是字符常量。

在C语言中, 字符常量具有数值。字符常量的值就是该字符的ASCII码值。

可以把字符常量看做一个字节的正整数。

例如,char  a, b, u, v
	a = 'F' ;         //  将70送给a
	b = 'A'+2;        //  b存放的是 'C' 字符 
	u = '  ' + 'B';   //  u存放的是 'b' 字符
	v= 'b' - 32;      //  v存放的是 'B' 字符
它们分别相当于下列运算;
	a= 70;
	b= 65+2;
	u= 32+66 ;
	v= 97-32;

常见的ASCII码: '\0'—>0 0—>48 '\n'—>10 '\r'—>13 SPACE —>32 'A'—>65 'a'—>97 127之后就是乱码了

1.5 字符串常量

所谓字符串常量是指用双引号括起来的一串字符来表示的数据。(字符串以\0结尾) “9”—‘9’,’\0’

下面给出几个字符串常量的例子:

"Hello!", "StudentS", "9", “LINUX", "李四" “北京海淀成府路***号", "姓名:", “****@163.com", ""

1.6 标识符常量

所谓标识常量是指用标识符代替常量使用的一种常量, 其名称通常是一个标识符。

标识常量也叫符号常量,一般用大写英文字母的标识符。

在使用之前必须预先定义。

定义格式: #define 宏名 值

    1、宏定义的位置:头文件下方,主函数上方
    2、宏名:一般要求大写,由字母数字下划线组成,数字不能作为开头
    3、宏名、值用空格分隔
    4、如果宏中涉及了参数,在宏后的定义需要对每个参数使用小括号明确优先级
例如
#define   MAX    50
#define   PI       3.1415926
#define   NULL    0
#define   EOF     -1
#define   ERROR   -1
其中,MAX、PI、NULL、 EOF和ERROR都是标识常量, 它们代替的常量分别是503.14159260-1-1 。
一般情况,每个标识常量说明式子只能给出一个标识常量,并且占据一个书写行。
定义一个宏名字之后,可以在其他宏定义中使用,例如:
	#define ONE 1
	#define TWO ONE+ONE
	#define THREE ONE+TWO
如果一个串长于一行,可在行尾用反斜线”\”续行
     #define LONG_STRING “This is a very very long \
	String that is used as an example”

宏的作用方式:

宏名进行宏的使用,代码中出现宏名的地方使用宏的值进行替换

带参宏: #define 宏名(参数) 值/表达式

#define ADD(x,y) x+y

宏的字符串化:#

字符串拼接:##    拼接的时候如果符号前有空格会进行强连接,忽略无效字符
    

如果宏的值部分不是一个正常的数值或表达式,则会当作宏名处理,此时需要在字符串的左右两边加上双引号

eg:
#define STR hello    此时将hello当作一个宏名处理,如果文件中没有该宏报未定义的错误
#define STR "hello"    编译通过,将hello当字符串处理
#define A(name,type) type name_##type##_type
#define B(name,type)  type name##_##type##_type
	A(abc,int);
	int name_int_type
	B(hello,char);
	char hello_char_type