c
C++1.数据类型
1.第一个代码分析

1.数据类型
定义一个变量或者常量 其实就是开辟了一块不同大小的空间,根据定义的格式来决定空间的大小,然后给这个空间起一个名字,然后在空间里存一个值,如果值的大小超过了空间的大小,就会造成数据的丢失。输出的时候,可以自己定义输出个格式,就是把空间的值给拿出来,然后按照要求来输出,输出的格式跟空间的格式没有关系,因为空间的格式只是为了决定这个空间的大小。
| 类型 | 大小 (字节) | 范围/精度 |
|---|---|---|
bool |
1 | true 或 false |
char |
1 | -128 到 127 或 0 到 255 |
signed char |
1 | -128 到 127 |
unsigned char |
1 | 0 到 255 |
short |
2 | -32,768 到 32,767 |
unsigned short |
2 | 0 到 65,535 |
int |
4 | -2,147,483,648 到 2,147,483,647 |
unsigned int |
4 | 0 到 4,294,967,295 |
long |
4 或 8 | 平台相关 |
unsigned long |
4 或 8 | 平台相关 |
long long |
8 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
unsigned long long |
8 | 0 到 18,446,744,073,709,551,615 |
float |
4 | 约 7 位十进制数字精度 |
double |
8 | 约 15 位十进制数字精度 |
long double |
8, 12 或 16 | 平台相关,更高精度 |
1 字节 (Byte, B) = 8 位 (bit)1 KB (Kilobyte) = 1024 B1 MB (Megabyte) = 1024 KB1 GB (Gigabyte) = 1024 MB1 TB (Terabyte) = 1024 GB
1 变量和常量
1.1 关键字

1.2 变量

2.整形和变量的定义和输出

3.整形的输入

scanf 是不安全的,如果不按照要求格式输入就会造成溢出,但是也会接受,但是数据就会丢失部分,所以有可能报错
4. short int long longlong

输出



输入

5.字符型
chor 存储是以 ascii 码形式存储
2.关键字 sizeof

3.转义字符

4.浮点数

单精度 4 个字节 双精度 8 个字节
5.类型限定符


2.运算符
1.算数运算符

2.逻辑运算符

3.运算符优先级

多个运算符的时候建议用()括起来,可读性更高 逻辑更清晰
4. 类型转换

5.条件判断 if

6.三目运算符

满足下 x>y 返回 x 否则返回 y

嵌套
7.switch

8.while

9. do while

10.for 循环

11.跳转语句
1.continue

2.break

break 只跳出离它最近的一层循环;break 只能在 switch 和循环中使用
3.goto

12.数组


12.1 一维数组的初始化


12.2 二维数组初始化



12.3 字符数组和字符串的区别

13.字符串的输入输出


fgets 可以指定接受到数据的大小,并且会接收换行的转义字符,如果打印的话 还会进行换行,并别\n 会占一个元素,而且指定接收大小的时候,会少接收一位,因为要自动补一个’\0‘,作为字符串的结束
前两个不安全,超出范围会报错,fgets 超出范围不会报错,但是只会接收规定范围的数据,超出的不接收。


13.1 字符串的拼接

14.函数
14.1 函数的构造

14.2 函数声明 和 exit 函数

14.3 分文件编程

14.4 防止头文件重复包涵


15.指针

15.1 含义
指针本质就是指的是内存地址;
指针变量指的是存储内存地址的变量;
15.2 p 和 *p

15.3 万能指针

15.4 const 修饰的指针

前后都有 const 两个都不能改 p *** p **都不能改
15.5 指针操作数组

16.字符串处理函数
16.1 复制

注意:会覆盖原来的内容

16.2 拼接


16.3 比大小


16.4 按指定格式输出输入


16.5 寻找


16.6 分割

while 循环里 第一次分割需要传首地址,后面传 NULL 就可以
16.7 转型





17.静态变量 static 和全局变量

17.1 全局变量


17.2 全局函数和静态函数
和变量是一样的

18 内存布局

eg:



18.1 内存操作函数


现在版本这个重叠问题已经解决

memmove 就是用来解决 memcpy 的重叠问题的,现在一般不用了

19 结构体

19.1 结构体成员的使用


字符串赋值的时候 如果是初始化结构体时可以直接赋值,以外赋值或者修改都要从 strcpy
eg:
1 | struct Person { |
1 | #include <string.h> |
19.2 结构体和指针




20.共用体 联合体



补充
21.枚举


22.typedef

23.文件操作
perror函数是一个用于错误处理的库函数,它的作用是将上一个函数发生错误的原因输出到标准错误输出(stderr)。
1. 概述

2. 文件的打开




3.文件关闭

4.按照字符读写文件


以字节的方式读文件


5.按照行来读写文件

fgets

memset 是为了把 buf 里面的数据清空,防止后面写进去后读操作时读取到旧的数据.
训练
1 | #define _CRT_SECURE_NO_WARNINGS |
}
6.按照格式化 读写文件

读文件

读取的时候,需要用变量来接收

7.按照块读写文件


8.文件的随机读写


9.获取文件信息


将文件的信息保存在一个结构体内

10.删除文件和更改文件名字

c 高级
void

sizeof



指针 堆栈


const 修饰常量

const 修饰的全局常量 直接和间接修改都不能保护,因为是在常量区中
const 修饰的局部变量,不能直接修改 间接可以修改,因为实在栈中,不受保护,是一个伪常量
字符常量


宏





指针





字符串指针强化

或者设置数组的元素个数多一点,会自动加一个 ‘\0’

答案 6 5
strlen 统计的时候不算上‘\0’

strof 统计的是整个数组的长度
答案 100 5


字符串函数
赋值的操作 注释是例子 把 while 里 a=0 改成 1 运行两次看结果来理解这个操作

用指针方式实现反转

格式化 sprintf




堆

和 malloc 唯一的区别会自动把内容内容初始化为 0;

realloc 是重新分配空间是用的
格式化 sscanf

忽略某种类型的字符 遇到空格和 \t 和第一个非该字符 会结束忽略 注:**非常不好用**


这个也不好用,匹配到第一个非范围内的字符就会停止 可以搭配忽略来用 


匹配到第一个设定的字符就停止
容易出错的点

指针偏移后 在释放指针 不会把前面的空间释放了 会报错
这种可以定义一个临时指针指向原指针,代替原指针进行操作,最后释放原指针就行了

将局部变量返回并调用,会乱码,因为局部变量在函数结束时就释放掉了
const
