1.在vi编辑器中实现字符串的替换用:s
:s/well/good/ 替换当前行第一个well为good
:s/well/good/g 替换当前所有well为good
:n,$s/well/good/ 替换第n行开始到最后一行中每行的第一个well为good
:n,$s/well/good/g 替换第n行开始到最后一行中每行所有的well为good
如果是文件中的替换:sed -i "s/字符串/\ /g" 文件名
2.变量声明和变量定义有什么区别?
为变量分配地址和存储空间的称为定义,不分配地址的称为声明。一个变量可以有多个地方声明,但是只在一个地方定义。加入extern修饰的是变量的声明,说明此变量将在文件以外或者在文件后部分定义。
3.static作用
1)隐藏变量
http://www.cnblogs.com/dc10101/archive/2007/08/22/865556.html
2)保持变量的持久性
存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。
3)默认初始化为0
其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0x00
存储在静态存储区的变量有两种,一种是全局变量和static变量
4.sizeof和strlen区别?
sizeof是一个操作符,strlen是库函数
sizeof的参数可以是数据类型也可以是变量,而strlen只能以结尾为'\0'的字符串做参数
编译器在编译时就计算出了 sizeof 的结果。而 strlen 函数必须在运行时才能计算出来。并且 sizeof计算的是数据类型占内存的大小,而 strlen 计算的是字符串实际的长度。数组做 sizeof 的参数不退化,传递给 strlen 就退化为指针了。
5.链表和数组有什么不同?
1)存储形式不同。
数组是一块连续的空间,声明时就要确定长度。链表是一块不可连续的动态空间,长度可变,每个节点都需要保存相邻节点的指针
2)数据查找。
数组是线性查找,查找速度快,查找操作直接使用偏移地址;链表需要按顺序检索节点,效率低
3)数据插入和删除
链表插入和删除节点速度快,数组可能会遇到大量数据移动
4)越界问题
链表不存在越界问题,数组会出现越界问题
6.队列和栈的异同?
队列和栈都是线性存储,但是两者的插入和删除数据的操作不同,队列是“先进先出”,栈是“后进先出”