Chinaunix首页 | 论坛 | 博客
  • 博客访问: 10661
  • 博文数量: 4
  • 博客积分: 133
  • 博客等级: 入伍新兵
  • 技术积分: 45
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-08 15:36
文章分类

全部博文(4)

文章存档

2012年(4)

我的朋友
最近访客

分类:

2012-11-16 22:36:10

原文地址:一道有趣的笔试题 作者:星辉流动

这道笔试题之前在cu上也看到过,今天在群里又问这道题。于是就把之前在cu看到的解题方法自己实现了一遍。题目如下:

点击(此处)折叠或打开

  1. void f()
  2.   {
  3.       
  4.  
  5.    }
  6.   int main()
  7.  {
  8.      int x = 4;
  9.      int y = 5;
  10.       f();
  11.     printf("%d,%d\n",x,y);
  12.     return 0;
  13.  }
在函数f中编写代码,改变x和y的输出值。
实现代码如下

点击(此处)折叠或打开

  1. #include
  2. void f()
  3. {
  4. int a;
  5. int *p = &a;
  6. int temp1 = 0,temp2 = 0;
  7. while(!(temp1 == 4 && temp2 == ))
  8. {
  9. if(*p == 4)
  10. {
  11. temp1 = 4;
  12. *p = 7;
  13. p++;
  14. }
  15. else if(*p == 5)
  16. {
  17. temp2 = 5;
  18. *p = 8;
  19. p++;
  20. }
  21. else
  22. p++;
  23. }
  24. }
  25. int main()
  26. {
  27. int x = 4;
  28. int y = 5;
  29. printf("%p\n%p\n",&x,&y);
  30. f();
  31. printf("%d,%d\n",x,y);
  32. return 0;
  33. }
  34. ~
运行结果为:

点击(此处)折叠或打开

  1. [root@localhost ~/mylearn]# ./edit
  2. 0xbfa1a9e0
  3. 0xbfa1a9dc
  4. 7,8

主要思想为:找到f函数的栈指针,然后往回遍历栈帧,找到x和y的地址,然后就修改其值。当然,可能还有其他更好的解法,但是从这里可以看出在c中指针的灵活性。
阅读(254) | 评论(0) | 转发(0) |
0

上一篇:void用法详解

下一篇:没有了

给主人留下些什么吧!~~