A. if(!!i){f();} B. g(f()); C. a=a+1; D. g("abc");
A. a+sizeof(int) B. &a[0]+1 C. (int*)&a+1 D. (int*)((char*)&a+sizeof(int))
int main() { char *p = "hello,world"; return 0; }
A. ... B. ... C. 栈和常量区 D. 栈和堆
分析:"hello,world" 是常量,赶脚应该就是 C 吧,应该大家感觉都一样。这里不涉及什么堆的事。
#include <stdio.h> int main() { long long a = 1, b = 2, c = 3; printf("%d %d %d\n", a, b, c); return 0; }
分析:貌似问题没有想的那么简单。如果说运行结果,很简单,有人是 1 0 2;有人是 1 2 3。涉及到 little/big endian 和参数入栈的问题。
分析:有些无能为力。A 是要打开文件的,貌似涉及很多内核操作;exit 是退出进程,结束进程,应该也要深入内核。memcpy ,me 一直犹豫用户区的数据拷贝要不要通过内核。strlen me 感觉关系不大。
分析:貌似是用来管理物理块的,后面的填空题正好有说,O__O"…
D. DMA 不需要中断控制,...
分析:ABCD 就是死锁的四个必要条件,操作系统书上貌似说的很明确。
分析:D 顺序执行以下,就可以。B 的话,让后面一个执行到+2,但不要写结果,然后前一个执行完,然后写结果,为 2。C 3 的话,也好分析。A 不可能!肿么可能呢?肿么可能结果只为 1 呢?两个线程都会 +2,+1 何从谈起?先 +1,然后让后面的加法错了,然后结果写进去?前一个 ++n 都没执行的话,后一个又肿么会执行呢?总之不可能是 1 !不可能!O__O"…(坚决不相信它可以。)
分析:总之 ABD 给人的感觉是显而易见的错丫,有木有,所以排除法还是能用的!至于 hash 结构,确实也不可以范围检查,因为 key 映射为 value,根据的是 hash 函数,而这个函数一般不满足原来的单调性,实际上就不应该满足!因为 hash 函数的设计是要 value 的映射尽可能滴随机、均匀!
分析:貌似是数据结构上面的一个结论,基于比较的排序的时间复杂度不能比 O(nlogn) 低,而快速排序平均复杂度就是 O(nlogn),而且常量系数更低一些。
分析:对于知道拓扑排序的,应该很容易作答(me 有时候在怀疑自己理解的是否正确?!)。
分析:虽然 me 不知道很高深的算法,但是 me 想丫,如果是 2 1 3 4 5 6 这样的序列,u 认为最少是多少次呢?me 感觉是 n-1 。但是,题目也许是另外一个意思,也就是对于普通的序列,求最大值和最小值,能将比较次数降到多少?(me 貌似见到过一些方法,但是忘了,O__O"…)
分析:构建二叉树,然后看看后序遍历是神马?a d e c b h g f,O__O"…,突然感觉一不小心 g f 和 f g 就写反了,me 应该没有吧?!
分析:只根据 UDP 在传输层,me 就选出答案了:物理层、数据链路层、网络层和传输层。
分析:224 = 128+64+32 = 1110 0000 B,me 一看,后面 5 个 0 ,就是 2^5 = 32 吧?shit !子网数?不是主机数丫,有没有,O__O"…,主机数貌似还得 -2 丫,有没有,当时 me 还奇怪来着,O__O"… x.x.x.x 貌似是个 C 类地址?这样的话,应该是 2 ^ 3 = 8 !
分析:不会的路过。
分析:哭丫,me 错了。这是软件工程上的玩意,me 一直认为 C 比 B 耦合度高呢,O__O"…。耦合度由低到高:A --> D --> C -->B
分析:蒙也是蒙 B,O__O"…
分析:想不到又一个 big/little endian 的问题。这个结果,me 还比较确定写,就是 0。uint 是 4 个字节,0x1234 的完整表示是 0x 00 00 12 34,因为是 big endian,所以,所以 &(取地址) 的话,如果当字节看的话,取到了最左边 00 字节的地址,一定要转换成 char 看的话,值就是 0 。
分析:虽然 me 忘记是神马公式计算了,只感觉和 n/2 有关系。然后随便画了几个试试,就可以找出来 (n+1)/2 的规律来,所以 答案是: 400。
#include <stdio.h> #include <stdlib.h> #define M 3 #define N 4 int get(int *a, int i, int j) { int v; if(a == NULL || i<0 || i>=M || j<0 || j>=N) exit(1); // v = *(a+i*N+j); // 这里有一个空 return v; } int main() { int a[M[N = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}; int v; v = get(a, 2, 1); printf("a[2][1] == %d\n", v ); return 0; }下面 get 是求一个二维数组元素的函数,请补全。( 1 个空)
int insert_sort(int *p, int count) { int i, j, tmp; if(p == NULL || count < 0) return 0; // for(i=1; i<count; i++){ tmp = p[i]; j = i-1; while(j>=0 && p[j]>tmp){ // 此处判断条件一个空 p[j+1]= p[j]; --j; } p[j+1] = tmp; // 此处一个空 } return 1; } int main() { int i, a[10] ={3, 2, 1, 7, 8, 10, 4, 5, 6, 9}; insert_sort(a, 10); for(i=0; i<10; i++) printf("%d ", a[i]); printf("\n"); return 0; }
分析:me 一下子就犹豫了,貌似赶脚也不是正确答案,就不多说了。
分析:不会的路过。