定义编号多用字符char型。
任何类型可以转字符型,反过来不见得。
定长字符串,浪费空间,但查找快。

二维数组传参,[] [x]第二个参数必须有。——涉及内存存储格式。
状态机 以信号驱动行为。当遇到什么,怎 么做,遇到另外的什么,怎么做。
对于循环,在编译器优化里,控制循环长度的语句中,在循环体内不涉及改变循环长度的情况下,语句中的内容会外提,(函数除外),因为没有必要每一次循环都计算长度。

作用域 生命期
语法能访问的范围——变量存在的时间
| 作用域 | 生命期 | |
|---|---|---|
| 函数 | 变量开始到函数结束 | 进入函数分配空间,退出函数释放空间 |
| 块 | 变量开始到块结束 | 同函数 |
| 全局变量g_ | 工程作用域,在工程中的所有源码互相访问 | 模块开始到模块卸载 |
| 静态全局 | 文件作用域 只在当前文件 | 同全局 |
| 静态局部 | 同函数 | 同全局 |
块 {}
就c近访问

- 编译期间检查,由编译器负责,检查作用域
- 运行期间检查,由操作系统负责,检查生命期
就像定义一个空指针,在编译的时候不会有问题,运行的时候就会C05报错了。
熟悉内存结构,可以越过编译检查,在作用域外面访问到作用域以内的信息。

全局变量,联合编译



IDE自动编译 链接起来

还需要声明回来,再使用

数据区分为已分配和未分配,全局变量卸载已分配的可读写区。
下面这个是 上面未初始化,下面初始化了

下面上面初始化,下面初始化

可见是已分配的两个是否初始化区。
甚至编译完装载成可执行文件之后,不需要运行就写在文件里面了。

.cpp支持函数返回值设置全局变量
某函数在设置前运行,由_initterm()负责。
_cinit 初始化官方库需要的全局变量,相关支持。
未初始化变量 在编译链接的时候只需要声明这个变量需要多少空间,而不是全部赋0,也不是以下面赋初值的形式,用数据来塞满数据区。下图就很大了


而如果说我们需要可执行文件扩展出更多的区域执行 我们别的代码的时候,就可以多未初始化变量来操作。
如下 我们要变量数组


实际上下图也会预留空间,但不会显示到文件大小
全局 常量(一定是初始化的)区和未初始化区


编译器不管业务类型,只按照内存属性,可以看到常量区都是其他常量。

静态全局变量 static静态 和全局一样,仅仅加上了编译器检查,不让跨文件访问。
编译可以,链接报错。
多次调用fun,是不断递增的,因为static int是初始化的,甚至都不定义,是在编译的时候就写进去的。

相当于这里是没有代码的,刚开始被硬编码写进二进制文件

编译机制问题 ,两个不是一个东西

会加上作用域,和层级,称之为名称粉碎。

设置粉碎机制

查看二进制文件可以找到 C的


C++的
