,然后是
常用功能,然后是高级功能。
9、在过去的这些年,你遇到了哪一个最大的困难,你是如何解决它的?你是单独做的还是和别人一起做的决定?为什么做这个决定?现在结果如何?
10、逻辑题:
有一5节车厢的过山车,每节能座两人,现有Luair,Jack,Gwen,Tom,Mark,Paul,6人去乘车,有以下条件
1,Luair和别人同乘
2,Mark 不合别人同乘,而且Mark的前一节车厢是空的
3,Tom 不和Gwen 与 Paul 中的任何一人同乘
4,Gwen乘3,或者4节
....下面是一些断言性的语句,让你判断对错
【题目解析】
??? Mark和那节空车厢可以当作一个整体,剩下的就是按照规则做排列组合就可以了,可能的种类不是太多。如果用笔画个草图的话就比较容易了。
11、链表反转:?(这道题不是微软的,不过考的比较多,就不另外开贴了)
数据结构如下:
typedef struct _Node
{
????int data;
????struct _Node *next;
} Node;
完成函数 Node *Reverse(Node *head),head为不带头节点的链表的首部。
Node *Reverse(Node *head)
{
????Node *tmp???? = NULL;????????????????//?缓冲变量
????Node *newHead = NULL;????????????????//?反转后的新头节点
????
????if ( head==NULL ) return head;???????// 空链表的情况
????if ( head->next==NULL ) return head;?// 链表只有一个节点的情况
?
????while ( head )???????????????????????// 判断有没有移动到最后
????{
????????tmp=head->next;??????????????????//?临时记录下一个节点
????????head->next = newHead;????????????// 把原来链表中的节点放到新的链表的首部
????????newHead = head;
????????head = tmp;
????}?// end of while
????return newHead;
} // end of Reverse
1、下面的
程序运行时哪里会出现错误:
struct S
{
int i;
int * p;
};
int main()
{
S s;
int * p = &;s.i;
p[0] = 4;
p[1] = 3;
s.p = p;
s.p[1] = 1;
s.p[0] = 2;
return 0;
}
【题目解析】
这道题考的是对结构体内存使用情况的理解。在32位的操作
系统中,int和指针类型的变量占用空间都是4个字节。在本题中 &;s.i的值实际就是 &;s的值,所以“int * p = &;s.i”也就相当于把p指向了结构体s的地址的起始位置。如图1所示。
图1
假设 &;s的值为0x12300,则p的值也是0x12300,p[0]指的是从0x12300开始的连续4个字节的空间,p[1]指的是从0x12304(注意!不是0x12301)开始的连续4个字节的空间。这样,p[0]也就相当于s.i,p[1]也就相当于s.p,分析到这一步,可以确定程序运行到“s.p=p;”这里不会出错。继续往下看。
在进行了“s.p=p;”的赋值之后,s.p指向的是s的首地址,此时s.p[0]相当于s.i,s.p[1]相当于s.p。
下一句“s.p[1]=1”执行过之后,此时s.p的值为1,也就是指向内存的0x00001处,隐患出现了。在执行“s.p[0]=2”的时候,实际上是向内存0x00001起始的连续四个字节写入0x00000002,而那块内存不属于这个程序,会出现访问非法内存的错误。
VC解析的汇编代码如下(部分),有兴趣的可以参考一下。
;?? 14:?????? S s;
;?? 15:?????? int * p = &;s.i;
00401028??? lea???????? eax,[ebp-8]
0040102B??? mov???????? dword ptr [ebp-0Ch],eax
;?? 16:?????? p[0] = 4;
0040102E??? mov???????? ecx,dword ptr [ebp-0Ch]
00401031??? mov???????? dword ptr [ecx],4
;?? 17:?????? p[1] = 3;
00401037??? mov???????? edx,dword ptr [ebp-0Ch]
0040103A??? mov???????? dword ptr [edx+4],3
;?? 18:?????? s.p = p;
00401041??? mov???????? eax,d
word ptr [ebp-0Ch]
00401044??? mov???????? dword ptr [ebp-4],eax
;?? 19:?????? s.p[1] = 1;
00401047??? mov???????? ecx,dword ptr [ebp-4]
0040104A??? mov???????? dword ptr [ecx+4],1
;?? 20:?????? s.p[0] = 2;
00401051??? mov???????? edx,dword ptr [ebp-4]
00401054??? mov