1. 常量
常量指的是在程序运行期间其数值不发生变化的数据,常见的有:整数常量、浮点常量、字符常量、字符串常量、标识常量。
1.1 整数常量
整数常量可以是十进制、八进制或十六进制的常量。
前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。
整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。后缀可以是大写,也可以是小写,U 和 L 的顺序任意。例如:
32 // 十进制
0213 // 八进制
0x3b // 十六进制
16 // 整数
16u // 无符号整数
16l // 长整数
16ul // 无符号长整数
整数常量可以带有一个后缀表示数据类型,实际运用如下:
int a = 10;
long b = 100000l;
unsigned int c = 10u;
1.2 浮点常量
浮点常量由整数部分、小数点、小数部分和指数部分组成,可以使用小数形式或者指数形式来表示浮点常量。
指数形式的实数一般是由尾数部分、字母e或E和指数部分组成。当一个实数的符号为正号时,可以省略不写,其表示的一般形式如下:
1.176e+10 表示 1.176乘10的10次方
-3.5789e-8 表示 -3.5789乘10的-8次方
1.3 字符常量
字符常量是指一个单一字符, 其表示形式是由两个单引号包括的一个字符。
例如:'A' , 'a' , 'Q' , '0' , '9' , '+' , ':' , '?' , '$' 都是字符常量。
在C语言中, 字符常量具有数值。字符常量的值就是该字符的ASCII码值。可以把字符常量看做一个字节的正整数。
以下为ASCII码表
TIPS:常用的ASCII码有a-z,A-Z,0-9,只需记住第一个字符的ASCII码然后推导即可,A的ASCII码为65,英文大小写相差32个ASCII码,0的ASCII码为48。
字符常量的运算
char a,b,c,d
a='D'; // 把68赋值给a
b='A'+6; // b存放的是'G'字符
c=' '+'C'; // c存放的是'C'字符
d='e'-32; // d存放的是'E'字符
//a,b,c,d分别做的运算
a=68;
b=65+6;
c=32+67;
d=101-32;
1.3 字符串常量
字符串常量是指用双引号括起来的一串字符来表示的数据。(字符串以\0结尾)
//定义字符串常量
char String[]="hello world!"; //系统自动对字符串常量自动加一个'\0'
//字符串常量例子
// "Hello!","6666","张三"
1.4 标识常量
标识常量是指用标识符代替常量使用的一种常量,其名称通常是一个标识符。标识常量也叫符号常量,一般用大写英文字母的标识符。
1.4.1 #define预处理器
一般格式为: #define <标识常量名称> <常量>
注意:一般情况,每个标识常量说明式子只能给出一个标识常量,并且占据一个书写行。例如:
#define PI 3.14159
#define NULL 0
#define MAX 100
在程序中使用这些常量时,编译器会将所有的 PI 替换为 3.14159,NULL替换为0,MAX替换为100。
定义一个宏名字之后,可以在其他宏定义中使用,例如:
#define ONE 1
#define TWO ONE+ONE
#define THREE ONE+TWO
1.4.2 const关键字
在程序中使用该const定义时,其值将始终不变,并且不能被修改。
// const 数据类型 常量名 = 常量值
const int MAX = 100; // 在该程序中,Max的值始终为100,且无法改变
2. 变量
2.1 变量基础
1)变量在程序中用变量名表示。变量名由用户根据其用途任意命名。
2)变量名由字母、数字、下划线组成,不能以数字开头,不能和C语言的关键字重名。
3)在程序运行时,变量占据存储空间的大小由其数据类型决定。变量在内存空间中的首地址,称为变量的地址。
2.2 变量的说明
变量在程序中使用时,必须预先说明它们的存储类型和数据类型。
变量说明的一般形式:<存储类型> <数据类型 > <变量名>
存储类型:是关键词auto、register、static和extern
数据类型:可以是基本数据类型,也可以是自定义的数据类型
2.3 变量的存储类型
2.3.1 auto
auto说明的变量只能在某个程序范围内使用,通常在函数体内或函数中的复合语句里。(默认是随机值)在函数体的某程序段内说明auto存储类型的变量时可以省略关键字auto,例如:
auto int a;
int b;
double x;
2.3.2 register
使用 register 定义的变量称为寄存器变量。它定义的变量存放在 CPU 内部的寄存器中,可以加快程序的运行速度。但register变量是要被CPU所接受的类型,意味着register变量必须是一个单个的值,并且长度要小于等于整型的长度。
2.3.3 static
static变量称为静态存储类型的变量,既可以在函数体内,也可在函数体外说明。(默认是0)
局部变量使用static修饰有以下特点:
1)在内存中以固定地址存放的,而不是以堆栈方式存放
2)只要程序没结束,就不会随着说明它的程序段的结束而消失,它下次再调用该函数,该存储类型的变量不再重新说明,而且还保留上次调用存入的数值。
举个例子:
#include<stdio.h> #include<stdio.h>
int main(){ int main(){
int i=1; int i=1;
while (i<5){ while (i<5){
int a=0; static int a=0;
a++; a++;
printf("a=%d\n",a); printf("a=%d\n",a);
i++; i++;
} }
return 0; return 0;
} }
//运行结果为:a=1 //运行结果为:a=2
a=1 a=3
a=1 a=4
a=1 a=5
2.3.4 extern
使用 extern 定义的变量称为外部变量。当变量在一个文件中的函数体外说明,所有其他文件中的函数或程序段都可引用这个变量。使用extern说明的变量是想引用在其它文件中函数体外部说明的变量。static修饰的全部变量,其它文件无法使用。
举个例子:
文件1:
int a = 100;
文件2:
#include<stdio.h>
extern int a; //如果不加extern语句,系统将找不到变量报错
int main(){
printf("%d\n",a);
return 0;
}
TIPS:简单来说就是如果要使用其他文件的变量,就需要在该文件中加上extern来说明变量是其他文件中的。