<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg>
讯享网
感谢 Zhilu 重新录入题目原件。好人一生平安。
- 本题目只作为2022纳新面试的有限参考。
- 为节省版面,本试题的程序源码省去了指令。
- 本试题中的程序源码仅用于考察C语言基础,不应当作为C语言「代码风格」的范例。
- 题目难度随机排列。
- 所有题目编译并运行于环境。
学长寄语:
长期以来,西邮Linux兴趣小组的面试题以难度之高名扬西邮校内。我们作为出题人也清楚的知道这份试题略有难度。请别担心。若有同学能完成一半的题目,就已经十分优秀。 其次,相比于题目的答案,我们对你的思路和过程更感兴趣,或许你的答案略有瑕疵,但你正确的思路和对知识的理解足以为你赢得绝大多数的分数。最后,做题的过程也是学习和成长的过程,相信本试题对你更加熟悉的掌握C语言的一定有所帮助。祝你好运。我们FZ103见!
对应于十进制的4位,那么对应于十进制的多少位呢?
对2^10 取log10,得3,再加1,得4,对2^10000取lg10,得3010,加1 得3011
尝试着解释程序的输出。
讯享网
- 3 + 2 < 2为假,3 + 2 > 2为真,则0>1 —if语句判断为假,执行else语句。
printf函数嵌套,先执行最里面的。printf“”什么都不打印,而printf函数返回值是0,所以前面对应输出20,即中间的printf函数%d被替换,打印Xiyou Linux Group - 20
而最外层的printf打印中间printf的返回值22,没有换行符,所以22就接着前面打印出来的
最后输出Xiyou Linux Group - 2022 - 接连的打印
在c语言环境中,嵌套的printf函数是从内到外调用的顺序来执行,这样保证在进行格式化输出的时候,所有参数都已经计算完毕。
- 程序的输出有点奇怪,请尝试解释一下程序的输出吧。
- 请谈谈对及的理解吧。
- p0==p1比较两个地址的值,不同,所以为0。
- strcmp 函数接受的是指向字符串的指针,具体来说,strcmp 的参数类型是 const char *
- 因为 p2 末尾没有 0,strcmp 将会读取 p0 的 0 之前的所有字符,以及之后 p2 后的字符,直到找到 0。所以
对应的值是一个随机值,所以strcmp的返回值也是一个随机的值,编译器运行后是-72 - sizeof(p0)求出的是字符串包含0的大小 12
- sizeof(p1)求出的指针的大小,对应64位系统上是8
- *p2表示字符数组的第一个元素,sizeof(*p2)求出的是一个字符的大小 1个字节
- strlen函数计算字符串长度且不计0,所以都为11
请结合本题,分别谈谈你对C语言中「全局变量」和「局部变量」的「生命周期」理解。
讯享网
生命周期描述了变量从创建到销毁的整个过程。不同类型的变量有不同的生命周期:
全局变量:在程序开始时分配内存,程序结束时释放内存,生命周期覆盖整个程序运行时间。
局部变量:在进入函数或代码块时分配内存,离开时释放内存,生命周期只在该函数或代码块的执行期间存在。
全局变量 a 在函数中仍然是可以访问的,但由于局部变量的作用域优先于全局变量,因此在函数内部,如果定义了一个同名的局部变量,就会遮蔽 即在函数内部,局部变量会优先被使用
- 打印的第一个a,在{}内,未被定义,所以输出随机值
- 第二个a的值的生命周期在test函数中,所以为2;- 打印的第三个a是全局变量,为3
【主函数是可以访问全局变量的,只要没有遮蔽的局部变量,前面函数内定义的a在函数外生命周期不存在】。
与各有什么特点呢,你了解他们的内存分配模式吗。
首先,union 和 struct 是 C 语言中用于组织数据的复合数据类型
struct 的特点
讯享网
union 的特点
- UNION 的大小由其最大成员决定。在这里,最大成员是 int i[5](20 字节),而 long l 通常是 8 字节。所以 sizeof(UNION) 将是 20 字节。
但是,由于内存对齐的原因,联合体的大小可能会被填充到某个边界。通常,联合体的大小会是其最大成员大小的倍数,通常是 8 字节或 4 字节。为了保持对齐,UNION 的最终大小会是 24 字节(20 字节加上 4 字节的填充)。
- 结构体所占内存为各成员总和:4+24+8=36
由于内存对齐,结构体应该对齐变为8的倍数,40
所以输出数字分别为:24 40
- 请使用纸笔推导出程序的输出结果。
- 请谈谈你对位运算的理解。
讯享网
- 4的二进制表示是100,7的二进制表示是111,按位或结果为111即7。
a左移3位,就是,乘以2^3=8,等于56 - 5&7是按位与运算。
然后向右移动3位 - 6^7 是按位异或运算。
之后再取反
4.先按位异或操作,再左移
请说说下面数据类型的含义,谈谈的作用。
- 。
- 。
- 。
- const关键字用于指示数据不能被修改
- 使用const可以明确哪些变量是不可变的
- char *const p是const指针,即该指针只能指向该地址
- char const *p; 和 const char *p 两者都表示指向const char的指针,表示一个指向不可修改字符的指针
(也即无法通过该指针改变所指地址的值。)
请用变量给出下面的定义:
- 含有10个指向的指针的数组。
- 指向含有10个数组的指针。
- 含有3个「指向函数的指针」的数组,被指向的函数有1个参数并返回。
1.int *p[10]
2.int (*p)[10]
3.int (*p[3])(int)
- 指针数组是“存放指针的数组”,这个变量是一个数组,用指针修饰,数组中的每个元素都是指针。
- 数组指针是“指向数组的指针”,这个变量是一个指针,用数组修饰,这个指针存储着数组的首元素
- 指针函数:本质是一个函数,不过它的返回值是一个指针
- 函数指针 的本质是一个指针,该指针的地址指向了一个函数,所以它是指向函数的指针,函数指针就是指向代码段中函数入口地址的指针
提示:动动你的小手敲出来更好哦~
冒泡排序
选择排序
讯享网
插入排序
提示:你需要为新字符串分配空间。
讯享网
字符串函数的使用
程序的输出有点奇怪,请尝试解释一下程序的输出吧。
讯享网
- 程序通过temp指针给二维数组赋值,for循环中temp<arr[5],所以第一次赋值时给整个数组赋值,从a[0][0]到a[4][4]
- 之后从a[1][0]到a[4][4],前面的一些赋值会被后面的数值覆盖,所以数值不连续。
你了解argc和argv吗?
直接运行程序argc的值为什么是1?
程序会出现死循环吗?
讯享网
- argc是参数个数,argv是指向字符的指针数组
- argc的最小值为1,因为程序执行时至少会有一个参数,即程序本身的名称
此时的argv[0]是程序的启动路径/名称。 - 程序不会死循环,在c语言中,int类型通常是有符号的
在自增的时候,argc的值会溢出,变成一个负值,然后打印出argv的值。

程序的输出有点奇怪,请尝试解释一下程序的输出吧。
- 大小端是指在计算机存储多字节数据(如整数、浮点数等)时,字节的顺序。主要有两种类型:大端和小端。
- 大端(存储)模式:是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中
- 小端(存储)模式:是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中
- 十六进制数,被强制类型转化为字符
在处理多字节数据(如整数)时,按照字节的顺序逐个获取字节
参照ASCII码表,得出结果正是输出值。
- 请谈谈你对的理解。
- 请尝试着解释程序的输出。
讯享网
- 宏定义是预处理命令的一种,在被预处理时是直接的文本替换,要注意括号的使用
- 宏定义中,第一个就是交换a,b的值,第三个的意思是,条件为真的时候,交换a和b的值
其中,SQUARE(1 + 2 + z++ + ++w) == 100,因为是直接文本替换,所以条件为假,不进行交换. - if后跟的t = a; a = b; b = t,由于没有加大括号,所以无论如何,a=b和b=t都会执行!
- 因为是SQUARE(a) a *a,执行了两遍,所以z和w都变为5
最后输出:
x = 2, y = 1, tmp = 1
x = 1, y = 2, tmp = 2
x = 2, y = 2
z = 5, w = 5, tmp = 2
你知道以下命令的含义和用法吗:
注:
嘿!你或许对Linux命令不是很熟悉,甚至你没听说过Linux。
但别担心,这是选做题,不会对你的面试产生很大的影响!
了解Linux是加分项,但不了解也不扣分哦!
请问你还了解哪些GNU/Linux的命令呢。
ls命令是list的缩写,用来打印当前目录的清单。可以列出目录的内容,包括文件和子目录的名称。
ls 查看当前目录下的所有目录和文件
ls -a 查看当前目录下的所有目录和文件(包括隐藏的文件)
ls -l 或 ll 列表查看当前目录下的所有目录和文件(列表查看,显示更多信息)
ls /dir 查看指定目录下的所有目录和文件 如:ls /usr
bullet l/指根目录,即所有目录最顶层的目录
bullet ~表示主目录,也就是当前登陆用户的用户目录
bullet …表示上级目录
bullet https://blog.csdn.net/_/article/details/表示当前目录
bullet rwx为“read write execute”的缩写,即对文件查看,编辑(移动,新建,修改,删除),运行该文件和目录。
其他:
bullet cd 目录
cd / 切换到根目录
cd /usr 切换到根目录下的usr目录
cd …/ 切换到上一级目录 或者 cd …
cd ~ 切换到home目录
cd - 切换到上次访问的目录

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/153796.html