西邮Linux2020年面试题
4在程序中执行此函数,其输出结果是什么,在同一程序中执行多次该函数,输出结果是否相同?
7 以下程序段运行的结果是什么,你知道怎么判断两个浮点数是否相同?
11 下面程序段的输出结果是什么,若取消第三行的const注释,数组a还能被修改吗?取消6,8行的注释,程序还能正常运行吗?解释其原因
1运行下面代码,输出结果是什么?解释其原因。
int i; int main(int argc,char *argv[]){ i--; if(i>sizeof(i)){ printf(">\n"); }else{ printf("<\n"); } return 0; }
> 1111 1111 1111 1111 1111 1111 1111 1111 而sizeof的结果为4,二进制表示为 0000 0000 0000 0000 0000 0000 0000 0100 显然在比较中将i当作了无符号整型来与sizeof(i)比较的,所以结果>
2执行下面代码段,谈谈你对宏的理解。
#define A 2 + 2 #define B 3 + 3 #define C A *B int main(int argc, char *argv[]) { printf("%d\n", C); return 0; }
宏进行的是简单的文本替换,题中A*B的替换结果其实是2+2*3+3
3分析下面程序的输出结果
int main(int argc, char *argv[]) { char str[] = "Welcome to XiyouLinuxGroup"; printf("%zu %zu\n", strlen(str), sizeof(str)); return 0; }
%zu输出size_t型,size_t在库中定义为unsigned int 。 strlen计算的是字符串的元素个数(不包括结尾的"\0") 而sizeof计算的是其占内存的大小,结尾"\0"也占一字节,所以结果为27。
4在程序中执行此函数,其输出结果是什么,在同一程序中执行多次该函数,输出结果是否相同?
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
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; }
如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。 "?:"是双目运算符,?前面的返回值不为零则返回?与:中间的值,否则返回:后面的值
6下面程序的执行结果是什么,请解释说明
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码的加减)