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) );
相关推荐
waicsdn_haha5 小时前
Visual Studio Code 2025 安装与高效配置教程
c语言·ide·windows·vscode·微软·编辑器·win7
----云烟----5 小时前
C/C++ 中 volatile 关键字详解
c语言·开发语言·c++
BanLul6 小时前
进程与线程 (三)——线程间通信
c语言·开发语言·算法
落羽的落羽6 小时前
【落羽的落羽 数据结构篇】栈和队列
c语言·数据结构
谏君之7 小时前
C语言实现的常见算法示例
c语言·算法·排序算法
曾浩轩8 小时前
51单片机学习之旅——C语言小知识
c语言·学习·51单片机
Want5959 小时前
C/C++跳动的爱心
c语言·开发语言·c++
kongba0079 小时前
Cursor提示词模板,开发GD32,C语言开发GD32 ARM单片机编程规范提示词 大厂风格代码规范
c语言·arm开发·单片机
LaoZhangGong1239 小时前
STM32的“Unique device ID“能否修改?
c语言·经验分享·stm32·单片机·嵌入式硬件
让我们一起加油好吗11 小时前
【排序算法】六大比较类排序算法——插入排序、选择排序、冒泡排序、希尔排序、快速排序、归并排序【详解】
c语言·算法·排序算法