一.认识c语言:
c语言是一种通用的高级语言,面向过程式的计算机程序设计语言。
- 易于学习。
- 结构化语言。
- 它产生高效率的程序。
- 它可以处理底层的活动。
- 它可以在多种计算机平台上编译。
二.数据类型:
char | 字符数据 | 1字节 |
short | 短整型 | 2字节 |
int | 整形 | 4字节 |
long | 长整型 | 4字节 |
long long | 更长的整形 | 8字节 |
float | 单精度浮点数 | 4字节 |
double | 双精度浮点数 | 8字节 |
这么多中类型,因为大小的不同。所能选着的范围就不同,在知道所需字符空间大小时选择合理的可节约空间。
计算机中单位之间的转换: bit(比特位),byte(字节),kb,mb,gb。
1gb=1024mb |
1mb=1024kb |
1kb=1024byte |
1byte=8bit |
浮点数的意思:小数点可以浮动的数就叫浮点数。
单精度浮点和双精度浮点的区别:
- float小数部分只能精确到后面6位,加上小数点前的一位,即有效数字为7位。
- double小数部分以精确到小数点后15位,有效位数为16位。
三.变量
局部变量:
1.在{}内定义的是局部变量。
2.局部变量的作用域是变量所在的局部范围。
3.局部变量的生命周期是:进入作用域生命周期开始,出生命周期结束。
全局变量:
1.{}外定义的就是全局变量。
2.全局变量的作用域是整个工程。
3.全局变量的生命周期是:整个工程的生命周期
注意事项:
1.变量创建的时候,要给一个初始化的值,不然会是一个随机数。
2.sizeof() //谁的大小
四.常量
1.字面常量 。 例:3,4,56,621.......
2.const修饰的常变量 。 例:const a = 10
3.#define定义的标识符常量 。 (后面会有详细讲解)
4.枚举常量(数字由字符来表示,其意义表达更加的明确)。例: enum color{RED,GREEN,BLUE}
五.字符串
1.双引号引起来的就是字符串。(里面有一串字符)
2.\0是字符串的结束标志,不算作字符串内容。
3.strlen("")求字符串长度的函数。
4.%s打印字符串。
六.转义字符
1.\? 在连续写多个问号的时候使用。
2.\" 用于表示一个字符串内部的双引号。
3.\a 警告字符,蜂鸣。
4.\t 水平制表符。
5.\xdd dd表示2个16进制的数字。
6.\' 用于表达字符常量'。
7.\\ 用于表达一个反斜杠。
8.\n 换行。
9.\r 回车。
10.\ddd 表示1-3个八进制数字。
七.选择语句和循环语句
1.if判断语句,if.... else..... , elseif。
2.三元表达式:a>b ? c:d。
3.switch语句实现多分支选择结构。
4.while和do...while循环。
5.for循环,嵌套for循环。
6.break结束循环,continue提前结束循环。
八.函数
1.函数其实就是功能,每一个函数用来实现一个特定功能。函数的名字应反应其代表的功能。
2.%d 打印整形
3.%c 打印字符
4.%s 打印字符串
5.%f 打印float类型
6.%lf 打印double类型
九.数组
1.一组相同类型元素的集合 int arr[5] = {1,2,3,4,5}
2.下标从0开始
3.strlen(arr) 这个方法作用于数组是个随机数。
4.数组初始化是四个字符大小,如果只定义了三个值,最后一个默认为0.strlen()会把0解析成\0。
5.c99标准之前数组的大小由常量或常量表达式来制定。c99标准之后,支持了变长数组。这个时候运行数组的大小是变量,但是这种指定方式的数组不能初始化。
十.操作符
1.算数操作符
+ - * / %
2.位移操作符
>> <<
3. 位操作符
& ^ |
4.赋值操作符
= += -= *= /= ^= |= >>= <<=
5. 关系操作符
> >= < <= !=(不相等) ==(相等)
6.逻辑操作符
&& 逻辑与 || 逻辑或
7.单目操作符
! 逻辑反操作 - 负值
+ 正值 & 取地址符
sizeof 操作数的类型长度 ~ 对一个数的二进制按位取反
-- 前置,后置-- ++ 前置,后置++
* 间接访问操作符(解引用) (类型) 强制类型转换
8.逗号表达式
exp1,exp2,exp3,.......expN
9.下标引用,函数调用和结构成员
[ ] () . ->
10.注意:
单目操作符:只有一个操作数的操作符。
除法:除号两端都是整数的时候,执行的是整数除法,如果有一个浮点数就执行浮点数的除法。
位移操作符:涉及到二进制。
逗号表达式:逗号表达式就是用逗号隔开的一串表达式,特点是从左往右依次计算,整个表达式的结果是最后一个表达式的结果。
十一.常见关键字
1.C语言本身内置的,关键字都是语言本身预先设定好的,用户是不能字节创造关键字的。
signed | 有符号的 |
unsigned | 无符号的 |
enum | 枚举 |
struct | 结构体 |
union | 联合体 |
void | 无 |
const | 常属性 |
extern | 声明外部符号的 |
register | 寄存器 |
static | 静态的 |
return | 函数返回值 |
typedef | 类型重命名 |
static | 修饰变量和函数的 |
2.关键字static
- static修饰局部变量的时候,局部变量出了作用域,不销毁,被称为静态局部变量。本质上,static修饰局部变量的时候,改变了变量的储存位置的,影响了变量的生命周期,生命周期变长,和程序的生命周期一样。
- 全局变量是具有外部链接属性的。static修饰全局变量的时候,被称为静态全局变量,这个全局变量的外部属性链接就变成了内部链接属性。其他源文件.c文件就不能再使用这个全局变量了。
- 函数是具有外部链接属性的,static修饰函数的时候,被称为静态函数,会把函数的外部链接属性改变成内部链接属性。
3.关键字register
电脑上的存储设备有:硬盘,内存,高速缓存(cache),寄存器(集成到CPU上的)从左往右,速度从快往右,速度从慢到快,内存从大到小。
之前的cpu和内存联动,因为现在的cpu的计算速度越来越快,内存的速度跟不上。
现在cpu去寄存器里面拿数据,内存里的数据往高速缓存里存,高速数据往寄存器里存,可以保证大部分需要的数据可以再寄存器里面找到,这样整个效率就高起来了。
C语言中register只是建议把这个设置的变量放到寄存里。
十二.define定义常量和宏
#define 可以用来定义符号,定义宏。宏是有参数的。
#define ADD(x,y) ((x)+(y))
ADD是宏的名字,x和y是宏的参数,没有类型,(x+y)是宏体
十三.指针
指针:内存是给划分成一个个小的内存单元,每个内存单元的大小是1个字节(1byte)。为了能够有效的访问到内存的每个单元,就给内存进行了编号,这些编号被称为内存单元的地址,这些地址就是指针。
Int* p =&a。
Int是指的对象所存地址的变量类型 *说明p是指针变量。
*p = 20 可以通过*p找到a 然后改变a里面的值
不管什么类型的指针,都是在创建指针变量
指针变量是用来存放地址的
指针变量的大小是取决于一个地址的存放的时候需要多大空间
32位的机器上的地址:32bit位 – 4byte 所以指针变量的大小是4个字节
64位的机器上的地址:64bit位 – 8byte 所以指针变量的大小是8个字节
十四.结构体
结构体(struct)是把一些单一类型组合在一起的做法。
Struct Stu 算是结构体类型 s算是结构体对象 s.name 就是结构体对象.成员名
结构体指针变量->成员名
Ps -> name
指针可以用箭头,结构体用点。