存储类型
存储类型关键字:register、static、const、auto、extern
register寄存器变量,
(1)不一定真的存放在寄存器中
(2)不能定义寄存器数组
(3)cpu读取寄存器变量比读取内存变量更快
(4)只能修饰字符型、整型无法修饰浮点型
(5)不在内存中所以无法取地址
static 静态
保存在静态区
const常量
意思只读,不能修改它的值
auto int a 与 auto是相同的意思
extern为外部的意思,一般用于函数和全局变量的声明
其他关键字
sizeof 变量数组占用存储空间的大小
typedef 重命名相关的关键字
volatile 易改变,提醒编译器从最新内存这提取变量的值
基本数据类型赋值并输出
定义char类型的变量并赋值,输出字符使用%c,使用%d可以输出对应的Ascii码值。
定义int类型的变量并赋值,输出int,short类型字符使用%d。
输出long类型字符使用%ld。
输出float类型字符使用%f,默认保留后六位。
输出double类型字符使用%lf,默认保留后六位。
常量与变量
对于计算机而言只能识别二进制代码,然而对应于其他非数字常量需要转化为数字,使用ASCII码表
整型数据
八进制:0开头
十六进制:0x开头
字符常量与字符串常量
‘a’为字符常量,“a”为字符串常量,每个字符串的结尾编译器都会自动添加一个结束标志位‘\0’
八进制数输出是需要加个#,%#o
十六进制输出时需要加个#,%#x
格式化输出字符
没有专门的变量保存字符串,一边使用数数组来保存
char e[] = "hello world";
printf("e = %s\n",e);
输出地址,利用取地址符
int f = 999;
printf("&f = %p\n",&f);
类型转化
自动类型转化
(1)当表达式中出现了char、short、int中的一种,参加运算的成员会全部变为int类型参加运算,结果为int类型
(2)表达式中出现了带小数点的实数,则全部变为double类型,结果也为double类型
(3)表达式中有无符号数和有符号数,参加运算的成员变为无符号数,结果为无符号数
(4) 在赋值语句中等号右边的类型自动转换为等号左边的类型
(5)自动类型转换只是在运算中的临时转换,不会影响自动类型转换的变量值和类型
强制类型转换
把表达式的运算结果强制转换为类型说明符表示的类型
(类型说明符)表达式
算数运算符
只有整数才能取余
关系运算符
关系运算符连接的表达式只有真和假,一般用int保存,如果为真则为非0,为假则为0
位运算符
1、&按位与
与0的0,与1得1,某位清0
2、|按位或
或1得1,或0不变
3、~按位取反
1变0,0变1
4、^按位异或
相同位0不同为1
5、位移
>>右移 分为逻辑右移:高位补0,地位溢出
算数右移:高位补符号位,低位溢出(有符号位)
<<左移
逗号运算符
逗号运算符必须要加括号,A=(B,C,D)
依次运行B,C,D最后A的值为D的表达式结果
循环语句
goto循环在一个函数中实现代码的跳转
在平时编写代码时少使用goto会使代码可读性变差。