Static用法
用来修饰函数和变量
修饰函数之后,只能在本文件中明显调用,其他文件无法调用。
修饰局部变量
局部变量在局部函数运行完会消失
而静态局部变量不会消失,函数返回他的值也不变,相当于全局变量。
修饰全局变量
普通全局变量其他文件可见
静态全局变量只对当前文件可见
C语言编译过程为:预处理–>编译–>汇编–>链接
结构体字节对齐:内存的结构按照一定的规则在排序,而不是一个接着一个,提高存取效率,。
memcpy 函数实现,需要考虑到内存重叠场景及和strcpy区别
1 复制的内容不同,strcpy 只能复制字符串(包括结束符0),而memcpy复制任意内容。
2 复制的方法不同,strcpy不需要指定长度,它遇到字符串结尾符结束。所以容易溢出。memcpy则是根据第三参数聚丁复制的长度
3 用途不同。通常在复制字符串时用strcpy,而需要复制其他数据类型数据时则一般用memcpy
4 内存重叠时,strcpy会出现段错误,而memcpy不会
堆栈溢出一般是由什么原因导致的?
答 :1.没有回收垃圾资源
2.层次太深的递归调用
全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
答 、可以,在不同的C文件中以static形式来声明同名全局变量。
可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。
6、关键字volatile有什么含意 并给出三个不同的例子。
答:编译优化而导致的存取的数据不同步,定时器,多线程共享任务变量。
Register
尽可能将变量存在CPU内部寄存器,提高效率
结构与联合有和区别:
联合:所有成员共用一块地址空间
结构体:每个成员都有自己的地址空间
Const:意味着只读,一般修饰输入型参数,防止被恶意更改
堆和栈的区别是
(1) 内容不同:
栈:函数调用时,存放在函数的局部变量里
堆:由程序员自己分配
(2) 管理方式
栈:占用内存小,连续,系统自动分配并释放空间,速度快
堆:可分配空间大,不连续, malloc申请,free释放,速度慢,用起来方便
(3) 生长方式
栈:内存次哦啊
大小端:
低地址放低字节为小端。