C语言变量和常量

变量和常量

标识符

在计算机高级语言中,用来对变量、符号常量、函数、数组、类型等命名的有效字符序列统称为标识符(identifier)。

C语言规定标识符:

  • 只能由字母,数字和下划线组成。
  • 不能以数字开头。
  • 字母区分大小写。

不能与关键字和保留字重复。

在传统C语言用法中,一般常量都使用大写字母,变量都使用小写字母。

变量

声明变量

所有变量都必须先声明后使用,尽管某些变量可以通过上下文隐式地声明。

声明变量的一般形式:

C 复制代码
        数据类型 变量名列表;

一个声明指定一种变量类型,后面所带的变量表可以包含一个或多个该类型的变量。

C 复制代码
short int a,b,i;  //有符号短整型变量
unsigned char c;  //无符号字符型变量

一个声明语句中的多个变量可以拆开在多个声明语句中声明。

C 复制代码
short int a;
short int b;
short int i;
unsigned char c;

在声明变量后,应对该变量进行初始化。

初始化变量就是为变量赋一个初始值,只需在变量名后面加上赋值运算符=和应赋给变量的值。

c 复制代码
short int a;
a = 10;
unsigned char c;
c = 'A';

可以在声明的同时对变量进行初始化。

C 复制代码
short int a = 10;
unsigned char c = 'A';

不应将初始化的变量和未初始化的变量放在同一条声明中。

c 复制代码
short int a,b = 10; //a未初始化,b初始化为10

常量

在程序运行过程中,其值不能被改变的量称为常量。

从字面形式上即可识别的常量称为"字面常量"或"直接常量",即字面常量是没有名字的不变量。

整数常量

可以把整数常量写作十进制、八进制和十六进制。

  • 十进制:常量包含 0~9 中的数字,但是一定不能以 0 开头。
  • 八进制:常量包含 0~7 中的数字,必须以 0 开头。
  • 十六进制:常量包含 0~9 中的数字和 a~f 中的字母,总是以 0x 开头。

十六进制整数常量中的字母可以是大写字母也可以是小写字母。

整数常量的类型通常为 int,如果整数太大超出了范围,则转换成其它范围足够大的整数类型。

可以强制编译器把整数常量作为长整数,需在后边加上字母L(或l)。

可以强制编译器把整数常量作为双长整数,需在后边加上字母LL(或ll)。

可以指明整数常量是无符号的,需在常量后边加上字母U(或u)。

浮点型常量

浮点型常量可以写作为科学计数形式或指数形式。

  • 科学计数形式:十进制小数。
  • 指数形式:需要在指数数值前放置字母E(或e);eN(或e+N)表示 10 的 N 次方,e-N表示 10 的负 N 次方。

默认情况下,浮点型常量都以双精度数的形式存储。

为了说明浮点型常量是单精度的,需在常量后边加上字母F(或f)。

为了说明浮点型常量是扩展精度的,需在常量后边加上字母L(或l)。

字符常量

单引号括起来的单个字符称为字符常量。

C语言字符常量通常以ASCII码值的形式存储。

常用的字符常量ASCII码值:

  • 大写字母'A'ASCII码值为 65。
  • 小写字母'a'ASCII码值为 97。
转义序列

\开头的字符序列称为转义字符。

C语言规定的转义序列包括:

转义字符 描述 ASCII 码值
\a 响铃 0x07
\n 换行 0x0a
\t 水平制表(跳到下一个tab位置) 0x09
\b 退格,将当前位置移到前一列 0x08
\r 回车,将当前位置移到本行开头 0x0d
\f 换页,将当前位置移到下页开头 0x0c
\v 竖向跳格 0x0b
\\ 反斜杠字符 0x5c
\' 单引号字符 0x27
\" 双引号字符 0x22
\0 空字符 0x00
\ddd 位任意八进制值 nnn
\xhh 位任意十六进制值 nn

宏定义

简单的宏

符号常量:用#define指令,指定用一个符号名称代表一个常量。

简单的宏(C标准中称为对象式宏)的定义有如下格式:

C 复制代码
				#define 标识符 替换列表

宏的替换列表可以包括标识符、关键字、数值常量、字符常量、字符串字面量、操作符和排列。

当预处理器遇到一个宏定义时,会做一个"标识符"代表"替换列表"的记录。在文件后面的内容中,不管标识符在哪里出现,预处理器都会用替换列表代替它。

例:

C 复制代码
#define N 100
#define PI 3.1419
#define CR '\r'
#define EOS '\0'

带参数的宏

带参数的宏(也称为函数式宏)的定义有如下格式:

C 复制代码
		#define 标识符(参数列表) 替换列表

在宏的名字和左括号之间必须没有空格。如果有空格,预处理器会认为是在定义一个简单的宏。

带参数的宏可以包含空的参数列表。

例:

C 复制代码
#define MAX(x,y)    ((x)>(y))?(x):(y))
#define IS_EVEN(n)    ((n)%2==0)  

现在如果后面的程序中有如下语句:

C 复制代码
i = MAX(j + k,m - n);

预处理器会将这些行替换为:

C 复制代码
i = ( (j+k) > (m-n) ? (j+k) : (m-n) );
相关推荐
XH华2 小时前
初识C语言之二维数组(下)
c语言·算法
Uu_05kkq5 小时前
【C语言1】C语言常见概念(总结复习篇)——库函数、ASCII码、转义字符
c语言·数据结构·算法
嵌入式科普7 小时前
十一、从0开始卷出一个新项目之瑞萨RA6M5串口DTC接收不定长
c语言·stm32·cubeide·e2studio·ra6m5·dma接收不定长
A懿轩A7 小时前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列
1 9 J8 小时前
数据结构 C/C++(实验五:图)
c语言·数据结构·c++·学习·算法
仍然探索未知中10 小时前
C语言经典100例
c语言
爱吃西瓜的小菜鸡10 小时前
【C语言】矩阵乘法
c语言·学习·算法
Stark、11 小时前
【Linux】文件IO--fcntl/lseek/阻塞与非阻塞/文件偏移
linux·运维·服务器·c语言·后端
deja vu水中芭蕾12 小时前
嵌入式C面试
c语言·开发语言
stm 学习ing13 小时前
HDLBits训练3
c语言·经验分享·笔记·算法·fpga·eda·verilog hdl