| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 949 人关注过本帖
标题:C语言里面试的问题
只看楼主 加入收藏
glhz610
Rank: 2
等 级:论坛游民
帖 子:33
专家分:44
注 册:2010-4-4
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:5 
C语言里面试的问题
第1题:

  #include<stdio.h>
   
  unsigned short * Sum(unsigned char x, unsigned char y)
  {
  unsigned short s = 0;
  s = x + y;
  return &s; //........记为 语句1,第2题将替换掉此处
  }
   

  int main()
  {
  unsigned short *p = NULL;
  unsigned char a=1, b=2;
  p = Sum(a+b);
   
  printf("%u + %u" , a,b);
  printf("=%u\n" , *p);
  }

  A.1+2=0 B.1+2=3 C.1+2=NULL D.不确定

请问选择哪一个? 请详细解释一下!!



第2题:如果将上面的语句1改为return s; 结果如何?请解释!!   


还有就是想问下,这个程序怎样修改下,才能在编译器里运行检测...我试了下,问题一大推...不知如何改,才能在编译器里测试这类问题...求教!
搜索更多相关主题的帖子: C语言 面试 
2010-05-13 19:58
NOMIPS
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:86
专家分:537
注 册:2010-3-31
收藏
得分:10 
楼主的你的程序里面的括号等符合有问题,
而且你sum函数不是这样调用的,
main函数中无返回值。  }

修改后能编译的程序如下:
程序代码:
#include<stdio.h>

 unsigned short * Sum(unsigned char x, unsigned char y)

 {
  unsigned short s = 0;
  s = x + y;
  return &s; //........记为 语句1,第2题将替换掉此处
 }


  int main()
  {
  unsigned short *p = NULL;
  unsigned char a=1,b=2;
  p= Sum(a,b);

  printf("%u + %u" , a,b);
  printf("=%u\n" , *p);

  return 0;
这样会得到一个不确定的结果,因为函数sum在被调用后,里面的局部指针变量p已经被回收,指向不确定的地方;
试图返回这样的一个指针是非法操作。
用Editplus gcc编译得到*p=65535
如果改为return s这样方式 则得到正确的答案 3
#include<stdio.h>
 unsigned short Sum(unsigned char x, unsigned char y)
 {
  unsigned short s = 0;
  s = x + y;
  return s; //........记为 语句1,第2题将替换掉此处
 }


  int main()
  {
  unsigned short p ;
  unsigned char a=1,b=2;
  p= Sum(a,b);

  printf("%u + %u" , a,b);
  printf("=%u\n" , p);

  return 0;
  }

2010-05-13 20:25
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:8 
像sum函数里的变量s,它是存储在栈上的,当函数sum返回时,会退栈,这个变量的地址虽然还在,但是里面的内容已经不受保护了,值会被冲掉,会是不确定的值

问题2是只改return s这一句话吗?有的编译器不让过,过了的则使p 等于 3,当你printf它的时候会访问到地址3,会出问题
2010-05-13 20:37
xu362726904
Rank: 6Rank: 6
等 级:侠之大者
帖 子:160
专家分:471
注 册:2009-6-18
收藏
得分:2 
第二题真的只是改该一个返回值吗?
2010-05-13 20:47
glhz610
Rank: 2
等 级:论坛游民
帖 子:33
专家分:44
注 册:2010-4-4
收藏
得分:0 
呵呵 谢谢楼上的各位大虾,这次又学到点东西了..这是我在别的论坛上看到的一个问题,当时自己尝试弄清楚,可是怎么也不能完全搞明白,所以就到这边来问下了..呵呵
2010-05-13 22:01
alweeq86
Rank: 2
等 级:论坛游民
帖 子:67
专家分:20
注 册:2008-9-14
收藏
得分:0 
warning C4172: 返回局部变量或临时变量的地址
多看看编译时给的提示就会明白了
2010-05-14 09:13
快速回复:C语言里面试的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012737 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved