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.队列和栈的异同?

队列和栈都是线性存储,但是两者的插入和删除数据的操作不同,队列是“先进先出”,栈是“后进先出”