linux兴趣小组2017面试题浅析
来源:互联网 发布:国外php空间 编辑:程序博客网 时间:2024/05/23 18:30
linux兴趣小组2017面试题
1. 分析下列程序的输出.
int main(int argc, char *argv[]){ int t = 4; printf("%lu\n", sizeof(t--)); printf("%lu\n", sizeof("ab c\nt\012\xa1*2")); return 0;}
- 若运行printf("%d\n",t); 结果为4,因为sizeof是关键字,且其后面的内容在编译时运算并替换为运算后的数值,在运行程序时直接调用替换值,不再进行t--的运算,故t仍是4.
- 在进行sizeof运算时,\n、 \012、 \xa1 分别为一个字符,且包含结束符\0.
2. 下面代码会输出什么?
int main(int argc, char *argv[]){ int a = 10, b = 20, c = 30; printf("%d %d\n", b = b*c, c = c*2) ; printf("%d\n", printf("%d ", a+b+c)); return 0;}
- printf函数的运行机制为在栈上申请存储空间, 规则为先进后出, 因此printf()表现为参数从右向左运算, 即 c = 60 (c = 2), b = 1200 (b= c).
- printf函数的返回值为所打印字符的列宽(长度).
3.下面代码使用正确吗?若正确,请说明代码的作用;若不正确,请指出错误并修改。
void get_str(char *ptr){ ptr = (char*)malloc(17); strcpy(ptr, "Xiyou Linux Group");}int main(int argc, char *argv[]){ char *str = NULL; get_str(str); printf("%s\n", str);}
- 主函数中的指针变量str指向空指针, 在作为参数传进函数 get_str 时传给 ptr 时, 在被调函数中仅仅将 ptr 指向的内存地址变为了malloc函数申请的空间, 而主函数中的str仍指向空指针,并不会输出字符.
解决方法:
1) 使用二级指针void get_str(char **ptr){ *ptr = (char*)malloc(17); strcpy(*ptr, "Xiyou Linux Group");}int main(int argc, char *argv[]){ char *str = NULL; get_str(&str); printf("%s\n", str);}
2) 使用函数返回值将新地址返回
char * get_str(char *ptr){ ptr = (char*)malloc(17); strcpy(ptr, "Xiyou Linux Group"); return ptr;}int main(int argc, char *argv[]){ char *str = NULL; str = get_str(str); printf("%s\n", str);}
4. 请解释下面代码的输出结果。
size_t q(size_t b){ return b;}size_t (*p(char *str))(size_t a){ printf("%s\n", str); return q;}int main(int argc, char *argv[]){ char str[] = "XiyouLinuxGroup"; printf("%lu\n", p(str)(strlen(str))); return 0;}
- 该题考察的点为返回值为函数指针的函数(详情见《LinuxC 编程实战》P78).
- size_t (*p(char *str))(size_t a)是一个返回值为函数指针的函数,首先看 p ,因为()的优先级比*高,所以p先与()结合,p(char *str)是含有字符型指针参数的函数,返回值是size_t (*)(size_t a),也就是一个指向函数的指针.该指针指向的函数有size_t类型的参数.
9. 说明下面程序的运行结果。
int main(int argc, char *argv[]){ int a, b = 2, c = 5; for(a = 1; a < 4; a++) { switch(a) { b = 99; case 2: printf("c is %d\n", c); break; default: printf("a is %d\n", a); case 1: printf("b is %d\n", b); break; } } return 0;}
输出结果为:
b is 2c is 5a is 3b is 2
switch 中 case 之上的语句(赋值语句,输出语句等)会被跳过, 在本题中表现为 b = 99; 被跳过, 因此b的值仍为2.
14. 请修改下面的 swap 函数,使得既可以交换 int 类型的参数,也可以交换 double 类型的参数。
void swap(int *a, int *b){ int temp = *a; *a = *b; *b = temp;}
可以用宏定义:
\#define swap(a, b) ((x)=(x)+(y),(y)=(x)-(y),(x)=(x)-(y))
多加一个参数代表数字所占字节数,并使用memcpy函数:
void swap(int *a, int *b, int size){ char buffer[8]; memcpy(buffer, a, size); memcpy(a, b, size); memcpy(b, buffer, size); }
阅读全文
0 0
- linux兴趣小组2017面试题浅析
- linux兴趣小组2017面试题浅析
- 剑指小组2017----西邮Linux兴趣小组纳新面试题讲解(第17题)
- 西邮Linux兴趣小组2017纳新免试题第一关详解
- 西邮Linux兴趣小组2017纳新免试题揭秘
- 西邮Linux兴趣小组13级纳新免试题浅析(上)
- 西邮Linux兴趣小组13级纳新免试题浅析(中)
- 西邮Linux兴趣小组13级纳新免试题浅析(下)
- 西邮Linux兴趣小组13级纳新免试题浅析(完结)
- 西邮linux兴趣小组2015纳新试题之我的解读
- 2016年Linux兴趣小组免试题Level_5及Level_End详解
- Linux 兴趣小组2016免试题 第四关揭秘
- 西邮linux兴趣小组2016纳新免试题level_1
- LINUX兴趣小组面试总结
- 2017linux面试题整理
- 西邮linux兴趣小组2017纳新题知识点总结
- 2016西邮Linux兴趣小组大事记
- 浅析一道C++设计面试题
- 笨小熊 -- ACM解决方法
- 括号配对问题 -- ACM解决方法
- 阶乘因式分解(一) -- ACM解决方案
- html 标签
- 数组指针和指针数组的区别
- linux兴趣小组2017面试题浅析
- 查找杀人凶手
- 6174问题 --ACM解决方法
- ATPG之STIL格式说明
- tf.unpack函数的用法
- USACO-Section1.2 Milking Cows
- java分布式事务(JTA)实现 jotm和atomikos
- Oracle数据库中RMAN默认配置参数代表什么意思
- 【8086汇编】基础排序之基数排序