当前位置: 首页 > article >正文

C语言变量和常量

变量和常量

标识符

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

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

不能与关键字和保留字重复。
在传统C语言用法中,一般常量都使用大写字母,变量都使用小写字母。

变量

声明变量

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

        数据类型 变量名列表;

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

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

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

short int a;
short int b;
short int i;
unsigned char c;

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

short int a;
a = 10;
unsigned char c;
c = 'A';

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

short int a = 10;
unsigned char c = 'A';

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

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标准中称为对象式宏)的定义有如下格式:

				#define 标识符 替换列表

宏的替换列表可以包括标识符、关键字、数值常量、字符常量、字符串字面量、操作符和排列。
当预处理器遇到一个宏定义时,会做一个“标识符”代表“替换列表”的记录。在文件后面的内容中,不管标识符在哪里出现,预处理器都会用替换列表代替它。
例:

#define N 100
#define PI 3.1419
#define CR '\r'
#define EOS '\0'

带参数的宏

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

		#define 标识符(参数列表) 替换列表

在宏的名字和左括号之间必须没有空格。如果有空格,预处理器会认为是在定义一个简单的宏。
带参数的宏可以包含空的参数列表。
例:

#define MAX(x,y)    ((x)>(y))?(x):(y))
#define IS_EVEN(n)    ((n)%2==0)  

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

i = MAX(j + k,m - n);

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

i = ( (j+k) > (m-n) ? (j+k) : (m-n) );

http://www.kler.cn/news/150050.html

相关文章:

  • Veras:Revit AI渲染插件
  • Mybatis 使用枚举作为查询条件
  • Linux:Ubuntu系统安装软件
  • 【Spring之事务底层源码解析,持续更新中~~~】
  • Elasticsearch:向量搜索 (kNN) 实施指南 - API 版
  • 使用Java给钉钉群发消息
  • 【小聆送书第一期】让架构师的成神之路温暖你这个不景气的冬天
  • GPTS-生成一个动漫图像GPT
  • 2023-简单点-picamera2中的取消auto focus,进行手动焦距设定
  • 算法通关村第十二关|青铜|字符串转换整数
  • 题目标题:卫星定位(胡宁静) 暴力解法
  • php如何对比浮点数大小(bccomp函数)
  • 代码的并发问题
  • ASCII sorting
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • RabbitMQ消息模型之发布订阅Publish-Subscribe
  • docker中安装mysql,远程连接
  • 基于docker的onlyoffice使用--运行JavaSpringExample
  • 你了解vue的diff算法吗?
  • go学习之文件操作与命令行参数
  • leetcode 283. 移动零
  • JavaScript基础知识总结
  • Java 关于批量插入遇到的问题 -sqlserver
  • 配置阿里云的yum仓库
  • qt-C++笔记之主线程中使用异步逻辑来处理ROS事件循环和Qt事件循环解决相互阻塞的问题
  • 数学加速器:Python numpy.add函数全解读
  • 基于单片机的肺活量检测系统(论文+源码)
  • 树与二叉树堆:堆的意义
  • SpringBoot整合EasyExcel实现复杂Excel表格的导入导出功能
  • DNS/ICMP协议、NAT技术