西邮Linux兴趣小组2020面试题
作者:互联网
运行下面代码,输出结果是什么?解释其原因。
int i;
int main(int argc,char *argv[]){
i--;
if(i>sizeof(i)){
printf(">\n");
}else{
printf("<\n");
}
return 0;
}
>
未初始化的全局变量全部默认值为0,而i--后i的值为-1,二进制表示为
1111 1111 1111 1111 1111 1111 1111 1111
而sizeof的结果为4,二进制表示为
0000 0000 0000 0000 0000 0000 0000 0100
显然在比较中将i当作了无符号整型来与sizeof(i)比较的,所以结果为>
执行下面代码段,谈谈你对宏的理解。
#define A 2 + 2
#define B 3 + 3
#define C A *B
int main(int argc, char *argv[])
{
printf("%d\n", C);
return 0;
}
11
宏进行的是简单的文本替换,题中A*B的替换结果其实是2+2*3+3
分析下面程序的输出结果
int main(int argc, char *argv[])
{
char str[] = "Welcome to XiyouLinuxGroup";
printf("%zu %zu\n", strlen(str), sizeof(str));
return 0;
}
26 27
%zu输出size_t型,size_t在库中定义为unsigned int 。
strlen计算的是字符串的元素个数(不包括结尾的"\0")
而sizeof计算的是其占内存的大小,结尾"\0"也占一字节,所以结果为27。
在程序中执行此函数,其输出结果是什么,在同一程序中执行多次该函数,输出结果是否相同?
void fun()
{
int x = 0;
static int num = 0;
for (int i = 0; i < 5; i++)
{
x++;
num++;
}
printf("x = %d num = %d\n", x, num);
}
x = 5 num = 5
x = 5 num = 10
x输出结果相同,num的不同。
使用static修饰符定义静态局部变量,它的生命周期是整个应用程序的运行时间,它只会被初始化一次。每次调用fun()都会在num原有的基础上再加5,而x每次都是从0加到5
分析以下程序,推测并验证其作用。
int main(int argc, char *argv[])
{
int number;
unsigned mask;
mask = 1u << 31;
scanf("%d", &number);
while (mask)
{
printf("%d", (number & mask) ? 1 : 0);
mask >>= 1;
}
return 0;
}
首先,1u的作用是表示1是unsigned int类型的,<<是左移,
如char a=1,a的二进制为0000 0001,执行a<<3后a的值为8,其二进制数为0000 1000,低位补0。
&是且运算,对应二进制位都为1时该位的结果为1,否则为0。
如a=3,b=7,a&b=2(0011 & 1110 = 0010)
同理mask>>=1是向右移动一位,高位补0。
"?:"是双目运算符,?前面的返回值不为零则返回?与:中间的值,否则返回:后面的值
下面程序的执行结果是什么,请解释说明
int main(int argc, char *argv[])
{
char *str = "Xiyou Linux Group";
printf("%c\n", *str + 1);
return 0;
}
X的地址为该字符串的首地址,则*str='X',而'X'+1='Y'(ASCII码的加减)
以下程序段运行的结果是什么,你知道怎么判断两个浮点数是否相同?
int main(int argc, char *argv[])
{
double a = 3.14;
float b = a;
if ((float)a == b)
{
printf("Xiyou");
}
if (a != b)
{
printf("LinuxGroup\n");
}
return 0;
}
XiyouLinuxGroup
整数在转换成浮点数时精度有损失,float只能保证最少6位数字有效,而double只能保证最少15位数字有效。所以a!=b。当a强制转换为float时,a==b。
运行下列代码,解释运行结果,谈谈自己的理解。
int main(int argc, char *argv[])
{
int a[6] = {0x6f796958, 0x694c2075, 0x2078756e, 0x756f7247, 0x30322070,
0};
printf("%d\n", printf("%s", (char *)a));
return 0;
}
家用计算机一般都为小端机,即低位在前。例如题中:0x6f796958 在计算机中“58”在前,“69”在后。先输出十六进制数“58”所对应的字符,后输出十六进制数“69”所对应的字符。
分析下列程序的输出,解释其原因
int main(int argc, char *argv[])
{
int a[2][3] = {{5, 7}, {5, 2}};
int b[2][3] = {5, 7, 5, 2};
int c[2][2] = {{5, 7}, {5, 2}};
int d[2][2] = {5, 7, 5};
printf("%d %d\n", a[1][1], b[1][1]);
printf("%d %d\n", c[1][1], d[1][1]);
return 0;
}
2 0
2 0
int a[2][3] = {{5, 7}, {5, 2}};//相当于:{{5,7,0},{5,2,0}} int b[2][3] = {5, 7, 5, 2};//按顺序初始化,相当于{{5,7,5},{2,0,0}} int c[2][2] = {{5, 7}, {5, 2}}; int d[2][2] = {5, 7, 5};//同b
执行下面程序段,其输出结果是什么,解释其原因。
int main(int argc, char *argv[])
{
int a = 1;
printf("%d\n", *(char *)&a);
}
1
*(char *)&a是将a的指针改为char类型指针,再取值运算后a实际的值并未变化。
下面程序段的输出结果是什么,若取消第三行的const注释,数组a还能被修改吗?取消6,8行的注释,程序还能正常运行吗?解释其原因
int main(int argc, char *argv[])
{
/*const*/ char a[] = "XiyouLinux\0";
char *b = "XiyouLinux\0";
a[5] = '\0';
// b[5] = '\0';
printf("%s\n", a);
// printf("%s\n",b);
return 0;
}
1)不能被修改
2)不能正常运行
const修饰的数组,其中任何元素都不能被改变。
不能通过指针对数组b进行赋值
一个c源文件到一个可执行文件的过程中经历了那些步骤?
1、预处理
在预处理阶段,编译器主要作加载头文件、宏替换、条件编译的作用。一般处理带“#”的语句。
2、编译
在编译过程中,编译器主要作语法检查和词法分析。我们可以通过使用 -S 选项来进行查看,该选项预处理之后的结果翻译成汇编代码。
3、汇编
在汇编过程中,编译器把汇编代码转化为机器代码。
4、链接
链接就是将目标文件、启动代码、库文件链接成可执行文件的过程,这个文件可被加载或拷贝到存储器执行。
你可以看出这个函数的功能吗?尝试理解原理并优化
void sort(int arr[], int size)
{
int i, j, tmp;
for (i = 0; i < size - 1; i++)
{
for (j = 0; j < size - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
冒泡排序,依次比较数组内相邻两数,按升序或降序交换两数。
优化:
void sort(int arr[], int size) { int flag = 1; int count = 0; int i,j,temp; for(i=0;i<size-1&&flag;i++) { for(j=0;j<size-1;j++) { flag = 0; count++; if(arr[j]>arr[j+1]) { int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; flag = 1; } } } }
pwd (显示目前所在的目录)
ls : 列出目录及文件名,-a 全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来
mkdir(创建新目录):
mkdir [-mp] 目录名称cp 即拷贝文件和目录。
[root@www ~]# cp [-adfilprsu] 来源档(source) 目标档(destination)
标签:面试题,int,arr,argv,char,西邮,2020,printf,main 来源: https://blog.csdn.net/qq_22817845/article/details/121776675