目录
一、C语言知识点
1、计算机内存的分配五大区域(内存:1GB内核态 下面是3GB用户态)
1.栈:烧杯4KB是会放满的 //分系统栈和函数栈 存储局部变量【eg:main()里的int char[]】
2.堆:倒扣烧杯空间比栈大得多,由用户自己申请(malloc new),并且释放(free,否则内存泄漏)。所以寿命由用户决定
//**栈是局部变量 堆是全局变量 指针可以带出malloc地址,全局变量在所有函数体之外**
3.静态全局区:
.bss:未初始化的全局和静态变量(全局、static都默认初始为0)
.data:已经初始化的全局变量
/**
*1、静态变量:static
* 1)修饰局部变量:在函数结束时不会被系统回收,只在程序结束时被销毁;
* 只初始化一次;
* 2)修饰全局变量:只对本文件可见
*
*2、全局变量:被所有文件可见,声明周期是当程序结束时被销毁(少用全局变量**)
**/
4.【文字常量区:字符串常量不可修改(直接初始化时"hello")】 //?堆区
5.代码段
2、struct、union内存对齐方式
//位域:int a : 8(位) 更改a大小占1字节 bit 位
//数据类型系统定义的 数据结构自己定义的
1.结构体: 1)以最大的数据类型(不是数据结构char[5],算1B)为单位进行字节对齐
2)如果是结构体嵌套,就将结构体展开,看最大的数据类型
2.共用体(联合体):union
1)至少是最大的变量
2)内存值必须是所有数据类型的整数倍
3.枚举:enum DAY
{
MON, TUE, WED=10, THU, FRI, STA=1, SUN
//默认第一个是0 之后1 10 11 12 1 2
};
3、typedef 和 define 区别
1.typedef int INT //类型替换: type类型 def替换
typedef int sig_int; //嵌入式里系统有符号还是无符号要留心,typedef更清楚
typedef unsigned int un_int; //PC和一般系统里都是有符号数char int
2.#define INT int* //单纯代码替换,define陷阱 INT a,b; 结果:int* a,b;
二、数据类型和存储类型(变量)
1)数据类型:
2)存储类型:
1.auto //默认
2.static //全局变量用static可以多文件同名
3.register //放在通用寄存器里,但电脑还是放内存 通常在单片机嵌入开发才用,频率快效率高
4.extern //声明
//123定义 int i; 4声明 extern int i;
三、pritnf和scanf参数表
1)printf("格式字符",参数表列);
2)scanf("格式字符",地址参数);
四、杂谈
注意:1)编码速进四个空格,不用tab
2)实数精度比较(1*3/3 !=1 精度不一样了
解决办法:比差值,类似(实数(1*3/3)-1) < 1.23*e0199)
3)运算符优先级
4)C程序运行时没有char 和 float:
int <= char
unsigned
long
double <= float
5) scanf("")输入垃圾**
解决办法:%*c getchar(); getch() getche() //没有回显,有回显passwd
6) C语言允许内部调用,不能内部定义
7) char c int a
c = 'a' 等价于 c = 97
a = 'a' 就是赋值 a = 97
***********************************************************************************
1.以后买电脑看CPU选择 (主频 双核四处理器)
游戏虚拟3D: 选择Intel 单核性能强
工作: 选择AND 性价比高
2.RAM 掉电丢失缓存
3.指针间接寻址,只要取得地址就可以操作除非是内核等受保护的段
指针按数据类型增加 int* p++ 04 08 0c
4.数组不对下标进行合法检查,并且数组名a不允许左值,除非初始化整体赋值
C语言没String用字符数组
5.文件名字母开头不要数字开头,不同语言Java,C++编译不通过,变量也是要英文命名,看的清晰
6.整型不能给指针赋值除0以外,因为类型不一样 0这里是数字(ASCII值0x00000就是NULL)
7.真值位数不够 补到32位 //真值就是不到32位原码的二进制数
8.strlen(a)函数 不包含\0 只计算可显示的字符数
sizeof(a)运算符 包含\0 计算字节数,实际占存
9.运算符优先级
/b 纵向退格 /t 横向退表位 /r 回车不换行 /f 换页
6./xhh 16进制两位 /x41 相当于ASCII码‘A’65
/ddd 8进制三位 /101 相当于‘A’65 /0 相当于NULL
10.strlen遇到第一个ASCII码‘\0’ 即数字0
11余数符号,只看被除数: 因为余数=被除数减去(除数乘以商)
eg:(-2)%(-3) 被除数为-2 余数为-2
12.英文7位ASCII最高位0
中文16位符号扩展1,区别英文
13.结构体第一个变量地址和结构体地址一样,但类型不同
类似数组首地址a &a
14.指针基类型 int* p
15.void就三种:1)函数返回值malloc()通常都强制转换 2)函数参数 3)定义void*指针
16.虚拟内存:内存不用但程序又要加载到内存
17.高级调度(作业调度)接近人
中级调度(交换调度)虚拟内存将要到物理内存),
低级调度(进程调度)CPU硬件
18.摩尔定律18月CPU和硬盘速率翻一番,需要高速缓存
备注
cd /home/jsetc
snap 是Qt creater的更新包 build-Qtest1-Desktop-Debug和Qtest1都可以删除