西邮Linux2019面试题(上)

简介: 西邮Linux2019面试题

1.下面代码段将打印出多少个‘=’?运用相关知识解释该输出。

int main(int argc, char *argv[]) 
{
 for (unsigned int i = 3; i >= 0; i--)
 putchar('=');
}

运行结果:

死循环

分析:i是无符号整型变量,不可能变为负值,所以会死循环。

2.下列三种交换整数的方式是如何实现交换的?

/* (1) */ int c = a; 
          a = b ; 
          b = c;
/* (2) */
          a = a - b; 
          b = b + a; 
          a = b - a;
/* (3) */   
          a ^= b ;  
          b ^= a ; 
          a ^= b;

第一个是通过中间变量,暂时储存一个数的值,来达到交换数值的目的的。

第二个是通过算法,通过计算将a和b的值转化成一个算数式子储存,以便交换。(数学)

第三种是通过异或的原理,相同的两个值异或为零,任何数与零异或值不变。

3.有如下代码段所示的函数 f,当我们执行该函数时,会产生什么样的输出结果?在同一程序中 多次执行该函数,输出结果是否一致?

void f() 
{
    static int a = 0;
    int b = 0;
    printf("%d, %d\n", ++a, ++b);
}

执行结果:1 1

多次执行该结果是会变的,a是用static开辟的一个静态变量,是存在静态区的,函数执行结束后a所属的空间是不会被销毁的。

4.下面程序段的输出是什么?请解释该现象并说出与之相关尽可能多的知识。

int main(void) {
    printf("%d\n", printf("Xiyou Linux Group2%d", printf("")));
}

结果:Xiyou Linux Group2019

printf函数的返回值是写入的字符总数,此处写入了19个字符。

5.执行下面的代码段,会输出什么?请试着解释其原因,并叙述相关知识。

int main(int argc, char *argv[]) 
{
    char ch = 255;
    int d = 'a' + 1;
    printf("%d %d", ch, d);
}

输出结果:-1 98


这道题考的是ascii码,ascii一般是127位,255是拓展出来的。


对于255:二进制是0000 0000 1111 1111,但char类型只有一个字节,所以他是以1111 1111存到内存中的,再以整型的方式往出来取时,会进行整形提升 ,1111 1111 1111 1111,然后转化为原码就是1000 0000 0000 0001,所以输出会是-1;.


对于d:a的ascii码为97,“+1”后就是98.

6.执行以下代码段,将产生什么样的输出?请对输出加以解释,并手动计算代码中 t 的值。

int main(int argc, char *argv[]) 
{
    char x = -2, y = 3;
    char t = (++x) | (y++);
    printf("x = %d, y = %d, t = %d\n", x, y, t);
    t = (++x) || (y++);
    printf("x = %d, y = %d, t = %d\n", x, y, t);
}

执行结果:

              x = -1, y = 4, t = -1

              x = 0, y = 5, t = 1


-1|3

1111 1111 1111 1110

0000 0000 0000 0001


1111 1111 1111 1111——补码

1111 1111 1111 1110——反码

1000 0000 0000 0001——原码

所以是-1;

7.下面代码段的输出结果是什么?输出该结果的原因是?

#define X a+b
int main(int argc, char *argv[]) 
{
 int a = 1, b = 1;
 printf("%d\n", X*X);
}

输出结果:3

宏只是单纯的替换,不涉及运算符a+b*a+b

8.请解释下面代码段中每一句的效果。

int val = 2018;
int *pi = 2019;
pi = &val;
*pi = 0;

第一句为给int类型变量val赋值,

第二句是给int类型指针变量pi赋值(这里是给int*类型赋值int类型,所以pi储存的的地址为2019),

第三句是将val的地址赋给pi。

第四句是通过地址找到val,将val修改为0


相关文章
|
7月前
|
存储 运维 关系型数据库
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
|
7月前
|
运维 Linux Docker
Docker笔记(个人向) 简述,最新高频Linux运维面试题目分享
Docker笔记(个人向) 简述,最新高频Linux运维面试题目分享
|
4月前
|
Linux 数据安全/隐私保护 Perl
解锁Linux高手秘籍:文件操作+命令解析大揭秘,面试场上让你光芒万丈,技术实力惊艳四座!
【8月更文挑战第5天】Linux作为服务器与嵌入式系统的基石,其文件管理和命令行操作是技术人员必备技能。本文从文件操作和基础命令两大方面,深入浅出地解析Linux核心要义,助你在面试中脱颖而出。首先探索文件系统的树状结构及操作,包括使用`ls -la`浏览文件详情、`touch`创建文件、`rm -r`慎删目录、`cp`与`mv`复制移动文件、以及利用`find`搜索文件。接着掌握命令行技巧,如用`cat`、`more`和`less`查看文件内容;借助`grep`、`sed`与`awk`处理文本;运用`ps`、`top`和`kill`管理进程;并通过`chmod`和`chown`管理文件权限。
79 8
|
4月前
|
监控 Linux 数据安全/隐私保护
Linux大神养成记:掌握这些逆天命令与快捷方式,面试秒变MVP,让你的技术实力燃爆全场!
【8月更文挑战第5天】Linux作为开源领域的核心,熟悉其基本命令对系统管理员和技术人员至关重要。本文精选了面试中常考的Linux命令,覆盖文件管理、文本处理、进程监控及权限调整等关键领域,并介绍了提高效率的快捷方式。通过掌握如`ls -l`、`grep "error"`、`top`、`chmod 755`等实用命令,以及Tab自动补全、历史命令浏览等功能,不仅能显著提升日常工作效能,还能在求职面试时展现出扎实的技术功底。
67 4
|
6月前
|
存储 网络协议 编译器
【干货总结】Linux C/C++面试知识点
Linux C/C++基础与进阶知识点,不仅用于面试,平时开发也用得上!
597 15
|
5月前
|
Linux 编译器 Shell
拼多多面试 Linux下一个应用程序开始执行到main被调用之间经历了什么?
在Linux中,程序启动到`main`调用涉及加载器、内核、动态链接器和C运行时。`execve`系统调用加载ELF文件,内核创建进程,加载段,设置栈和调用动态链接器。动态链接器解析符号,重定位,执行初始化。C运行时初始化堆栈,调用`main`。从`_start`到`main`的流程包括环境设置和函数调用。
72 0
|
7月前
|
运维 Linux 程序员
最全树莓派4B安装64位Linux(不用显示器键盘鼠标),Linux运维面试送分题
最全树莓派4B安装64位Linux(不用显示器键盘鼠标),Linux运维面试送分题
最全树莓派4B安装64位Linux(不用显示器键盘鼠标),Linux运维面试送分题
|
6月前
|
消息中间件 Unix Linux
[高频]Linux中常见的命令及常见面试题
[高频]Linux中常见的命令及常见面试题
|
5月前
|
存储 Java Linux
Java面试之Linux和docker
Java面试之Linux和docker
46 0
|
7月前
|
运维 Linux Docker
ChatGLM3在Docker环境部署(1),Linux运维电话面试技巧
ChatGLM3在Docker环境部署(1),Linux运维电话面试技巧