常数
不能改变的值——常量
整形常量
整数常量可以是十进制、八进制或十六进制的常量。
前缀:0x 或 0X 表示十六进制,0 表示八进制,不带前缀默认表示十进制。
在整数的末尾 + L / l 代表长整型,在末尾 + U / u代表无符号
数字 | 类型 |
---|---|
85 | 十进制 |
0213 | 八进制 |
0x4b | 十六进制 |
30 | 整数 |
30u | 无符号数整数 |
30l | 长整数 |
30ul | 无符号长整数 |
浮点常量
由整数部分,小数点,小数部分和指数部分组成。
小数形式表示:包含整数部分、小数部分或同时包含
例如:
123.456,0.6,-36.2,12.0
指数形式表示:包含小数点、指数或同时包含
例如:
12.32e3,-125.3e2,0.45E5
e或E之前必须有数字,且e或E之后必须为整数
字符常量
字符常量存储在计算机存储单元中时,并不是存储字符本身,而是以ASCII代码形式存储
普通字符:用单引号括起来的一个字符 ‘a’ , ‘A’
ASCII代码重点背会
字符 | ASCII值 |
---|---|
0~9 | 48~57 |
A~Z | 65~90 |
a~z | 97~122 |
转义字符:在屏幕上无法显示的控制字符
例如:
//程序输出什么?
#include <stdio.h>
int main()
{
printf("%d\n", strlen("abcdef"));
// \62被解析成一个转义字符
printf("%d\n", strlen("c:\test\628\test.c"));
return 0;
}
结果为:
6
14
分析:
- “abcdef”共有6个字符,strlen是检测字符的长度函数,故打印出6
- “c:\test\628\test.c”中,\t为水平制表符,\62为八进制,皆为一个字符,故共有14个字符
字符串常量
用双引号把多个字符括起来。例如:“Beijing”
字符串常量在内存中以\0 结尾。
例如:
char p1[] = “Hello, world!”; ——系统对字符串常量自动加一个 ‘\0’
'\0’或‘\000’是代表ASCII码为0的控制字符,即“空操作”字符
符号常量
用#define指令,指定用一个符号名称代表一个常量
例如:
#define PI 3.1415
在对程序进行编译前,PI=3.1415,在之后的编译过程中可以用PI代表常量3.1415
注意:用此命令,行末没有分号
符号常量不占内存,只是一个临时符号,代表一个值,在预编译后这个符号就不存在了,不能赋予新值
变量
可以改变的值——变量
变量:有名字,具有特定属性的一个存储单元,用来存放数据
变量必须先定义后使用
例如:
int a = 3;——初始化
int为变量类型,a为变量名,3为变量值
int a;
a=3;——不是初始化
变量名实际上是以一个名字代表一个存储地址
从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据
整型变量
变量值在存储单元中都是以补码形式存储的
为了充分利用变量值的范围,在类型符号前面加上unsigned表示为无符号整数类型,在类型符号前面加上signed或者什么都不加表示为有符号类型
- 只有整型(包括字符型)数据可以加signed或unsigned修饰符,浮点类型不能加。
- 对无符号整型数据用“%u”格式输出。%u表示用无符号十进制数的格式输出
例如:
unsigned int a = 50;
printf(“%u\n”, a);
- 不可以将一个变量定义为无符号整型后,向他赋予一个负值
字符变量
用类型符char定义
#include<stdio.h>
int main()
{
char c = '?';
printf("%d %c\n", c, c);
return 0;
}
结果:63 ?
定义c为字符型变量并使初始值为字符 ‘?’
‘?’ 的ASCII代码为63,系统把63赋给c
%d——输出十进制整数,%c ——输出字符
变量的作用域和生命周期
作用域
- 局部变量的作用域是变量所在的局部范围。
- 全局变量的作用域是整个工程。
生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
- 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
- 全局变量的生命周期是:整个程序的生命周期。
常变量
在定义变量时,前面加上关键字const
const 声明常量要在一个语句内完成
例如:
const int a = 3;
定义a为整型变量,初始值为3,且在变量存在期间值不可以改变
常变量具有变量的属性:类型,占存储单元