西邮Linux兴趣小组2018纳新面试题总结
1
- 对于一维数组,
1[array] == array[1]
- 对于二维数组,
array[i][j] == (i)[array][j]
2
- sizeof和strlen计算的区别是字符串最后的那个
\0
,strlen不计算。
3
- static变量每次会跳过初始化语句,下一次使用该变量的初始值就是上一次该变量计算结果
- 前置++和后置++的区别:后置++是先取i的值做计算,计算后再自加1
4
- A:预编译,文件后缀是.i
- B:编译,进行一系列词法分析、语法分析、语义分析及优化后,生成相应的汇编代码文件,文件后缀.s
- C:汇编,将汇编代码转变成机器可以执行的指令(机器码文件)。文件后缀是.o/.obj
- D:链接,生成可执行文件.out
5
- const的第一种位置,指y的指向不能被改变,第二种位置,指y所指的空间的数据不能被改变
6
- %p这个转换说明符是专门为用来输出地址的,且是以十六进制表示的
- 第一行与第三行作用完全一样,属于特殊用法
- 第二行打印出的是
a[1]
的地址 - 第四行打印出的是
a[5+1]
的地址
7
- main函数中带了两个参数,通常用
int argc, char *argv[])
来表示,这两个参数也可以不用使用,它们的意义分别是:第一个表示参数的个数;第二个参数中argv[0]为自身运行目录路径和程序名,argv[1]指向第一个参数、argv[2]指向第二个参数……
8
- &是位运算中的且,运算法则为:
1&1 == 1;1&0 == 0; 0&0 == 0
9
- 本题涉及到大小端存储
- 字符串n的实际存储方式为:
0000 0000
0000 0000
0000 0000
0000 0001
- 故打印结果是1
10
#define MULTIPLY(x,y) x*y
,对应到(1+2,3)表示1+2*3,因为define定义的宏是一种傻瓜式替换- #表示将两个字符串连接
11
- 结构体内存空间的计算比较特殊,对于结构体icd来说,一个该类型变量所占内存为16,而cdi占了24(3*8)
12
- 文件打开使用了wb,表示二进制擦除写
- 变量a是以十六进制长整型储存的,其储存的数据通过转换成字符串,刚好对应了
Linux
这个字符串
13
- 这样写是一种经典的错误,即在函数中为形参赋予了实际的空间
- 修改:直接删去函数中的第一行,直接进行赋值就可以了