| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1715 人关注过本帖
标题:深信服的一道笔试题,C语言大神来看看
取消只看楼主 加入收藏
星闪夜空
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:50
专家分:119
注 册:2012-9-15
结帖率:100%
收藏
已结贴  问题点数:40 回复次数:14 
深信服的一道笔试题,C语言大神来看看
下列代码期望输出结果是1111,请找出fun1….fun4中存在的问题,并简单说明原因:
int* fun1(int a){
   int ret = a;
}
int* fun2(int a){
   int* p = (int*)malloc(sizeof(int));
   *p = a;
   return p;
}
int* fun3(int a){
   static int ret;
   ret = a;
   return &ret;
}
int* fun4(int a){
  return &a;
}
int main()
{
  printf(“%d”, *fun1(2)-*fun1(1));
  printf(“%d”, *fun2(2)-*fun2(1));
  printf(“%d”, *fun3(2)-*fun3(1));
  printf(“%d”, *fun4(2)-*fun4(1));
  return 0;
}
我主要对printf(“%d”, *fun3(2)-*fun3(1));
        printf(“%d”, *fun4(2)-*fun4(1));
这两个输出的结果不明白,如果能详细分析这两个输出的结果的,给40分。
搜索更多相关主题的帖子: return C语言 
2013-10-17 09:23
星闪夜空
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:50
专家分:119
注 册:2012-9-15
收藏
得分:0 
回复 2楼 wp231957
第一,既然存在问题,肯定是无法编译通过的,你可以注释掉printf(“%d”, *fun1(2)-*fun1(1));这条语句再编译。
第二,其中有几个中文符号,修改一下就可以了,相信难不倒你。
2013-10-17 09:38
星闪夜空
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:50
专家分:119
注 册:2012-9-15
收藏
得分:0 
回复 4楼 wp231957
#include <stdio.h>
#include <stdlib.h>

int* fun1(int a){
    int ret = a;
}
int* fun2(int a){
    int* p = (int*)malloc(sizeof(int));
    *p = a;
    return p;
}
int* fun3(int a){
    static int ret;
    ret = a;
    return &ret;
}
int* fun4(int a){
    return &a;
}
int main()
{
    //printf("%d", *fun1(2)-*fun1(1));
    printf("%d\n", *fun2(2)-*fun2(1));
    printf("%d\n", *fun3(2)-*fun3(1));
    printf("%d\n", *fun4(2)-*fun4(1));
    return 0;
}

这是我修改后的代码,能够编译通过。
2013-10-17 09:44
星闪夜空
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:50
专家分:119
注 册:2012-9-15
收藏
得分:0 
回复 6楼 hh373231690
1
0
0
2013-10-17 10:19
星闪夜空
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:50
专家分:119
注 册:2012-9-15
收藏
得分:0 
回复 8楼 hh373231690
那么你可以打印出printf("%d\n", 3*(*fun3(2))-*fun3(1));这条语句试试看,看结果是否是2,与你所说的是否吻合。
2013-10-17 10:36
星闪夜空
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:50
专家分:119
注 册:2012-9-15
收藏
得分:0 
回复 9楼 zhaogay
你可以在VC++中编译一下,可以看到后面两个输出的结果都是0
2013-10-17 10:51
星闪夜空
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:50
专家分:119
注 册:2012-9-15
收藏
得分:0 
回复 11楼 hh373231690
你用的是什么编译器??VC++吗??
2013-10-17 10:54
星闪夜空
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:50
专家分:119
注 册:2012-9-15
收藏
得分:0 
回复 15楼 hh373231690
根据你先前所说的,ret值不变,所以我才说3*(*fun3(2))-*fun3(1)按照你的说法为2
2013-10-17 11:57
星闪夜空
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:50
专家分:119
注 册:2012-9-15
收藏
得分:0 
回复 19楼 embed_xuel
关键为什么会出现那样的问题?
2013-10-17 11:58
星闪夜空
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:50
专家分:119
注 册:2012-9-15
收藏
得分:0 
回复 16楼 zhaogay
嗯,是的,我用VC++运行也是5
2013-10-17 11:58
快速回复:深信服的一道笔试题,C语言大神来看看
数据加载中...
 
   



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

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