1.
typedef
可以使类型重命名,使复杂的类型简单化
,就是简写,并且可以重定义,重定义前后的名字都可以使用。
typedef int in;
in mun1;
等价于
int num1;
2.
内存的分布:栈区、堆区、静态区
3.
static:静态的
用法一:
static修饰局部变量
本质:使变量的存储位置发生了变化
注意:变量的作用域没变,无法出作用域使用 // 延长的是生命周期
局部变量:每次进入函数会重新创建,出了函数就会销毁(将空间还给操作系统)
存储在栈区,进入作用域自动创建,出作用域自动销毁
修饰之后:
局部变量出了作用域不会回收,延长局部变量的生命周期,如果反复调用函数,会出现累积的效果
存储在静态区,直到程序结束,变量才会被回收 // static所在代码在编译期间已分配地址,其代码行在运行时不再执行,即其地址不再变化
用法二:
static修饰全局变量
修饰后:
全局变量无法在其他源文件中被引用
使其只能在其所在的源文件内部使用
即使其外部链接属性变为内部链接属性
用法三:
static修饰函数
函数不存在生命周期
修饰前:函数具有外部链接属性
修饰后:外部链接属性变为内部链接属性
函数只能在其所在的源文件内部使用,其他源文件无法使用
这样就能设多个函数,并且名字一样也不会冲突
4.
编译器在编译的时候,每个.c文件单独进行编译 生成自己的目标文件 如:text.obj,目标文件和链接库一起(链接库如库函数需要静态库之类的,初步认识即可)经过链接器生成可执行程序
引用全局变量时,是在链接器中引用,因为全局变量具有外部链接属性
格式:
extern+字符类型+变量
如:
extern int a;
5.
生成解决方案:编译+链接
生成了.exe文件,即可执行程序 存储在Debug文件中
6.
寄存器:register
电脑上存储数据时可以存在:
寄存器:字节 有几十个
高速缓存:128Mb
内存:8G/16G
硬盘:500G/1T
网盘:1T/2T
大小关系如下:
当某个变量会被频繁大量使用可以用register
格式:
register int a = 10;
register:建议将变量a放在寄存器中
由编译器决定是否放在寄存器中
提示:
对于现在的编译器来说,即使没有register,编译器也会根据实际情况将其放入寄存器中
7.
#define定义常量
格式:
#define A 100
含义:只要出现A,其内容就是10
也可以定义字符串、字符,如:
#define ARR “abc”
8.
#define定义宏
格式:
#define MAX(x,y)(x>y?x:y)
(x,y)为参数
(x>y?x:y)为宏体
MAX(x,y)被替换为(x>y?x:y)
//
宏和函数的区别是什么