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) );
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

往昔的恒纳兰那

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值