CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

一道面试题

楼主linhai1978(林)2005-03-05 10:26:51 在 C/C++ / C语言 提问

#include   <stdio.h>  
  main()  
  {  
          a();  
          b();  
          c();  
  }  
   
  a()  
  {  
          static   int   x=0;  
          if(x==0)  
          {  
  x=1;  
          }  
          printf("%d",x);  
  }  
   
  b()  
  {  
          static   int   x=0;  
          if(x==0)  
          {  
  x=1;  
          }  
          printf("%d",x);  
  }  
   
  c()  
  {  
          static   int   x=0;  
          if(x==0)  
          {  
  x=1;  
          }  
          printf("%d",x);  
  }  
  请问这道程序错在哪里?为什么 问题点数:20、回复次数:28Top

1 楼julysnowcn(julysnow)回复于 2005-03-05 10:34:15 得分 0

我知道错在哪里了,错在主考官的脑袋了.程序本身没什么错误,只是有些不符合规范,但也可以编译并正确运行.Top

2 楼shuihan84(shuihan84)回复于 2005-03-05 10:53:43 得分 0

楼上的大哥这程序能通过编译??  
  你用的什么超强编译器啊?:-)  
  至少该程序有一下几个错!!  
  1:函数没有在使用前先声明!这是绝对通不过编译的!!  
  2:下面函数没有返回类型(包括main)至少该改成void   a(),虽然不写也是正确的但这完全不符合规范!在有的编译器下可能不能通过编译!  
  另外始终觉得那3个静态变量不大对劲,还望高手解释解释这种做法不爽的地方!:-)Top

3 楼syd1207(既然选择远方,便只顾风雨兼程。。。)回复于 2005-03-05 10:58:35 得分 0

a()     b()     c()都没有声明!Top

4 楼syd1207(既然选择远方,便只顾风雨兼程。。。)回复于 2005-03-05 11:01:01 得分 0

#include   <stdio.h>  
   
  void   a();  
  void   b();  
  void   c();  
   
  int   main()  
  {  
          a();  
          b();  
          c();  
  return   0;  
  }  
   
  void   a()  
  {  
          static   int   x=0;  
          if(x==0)  
          {  
  x=1;  
          }  
          printf("%d",x);  
  }  
   
  void   b()  
  {  
          static   int   x=0;  
          if(x==0)  
          {  
  x=1;  
          }  
          printf("%d",x);  
  }  
   
  void   c()  
  {  
          static   int   x=0;  
          if(x==0)  
          {  
  x=1;  
          }  
          printf("%d",x);  
  }  
  Top

5 楼godenwang1848(上帝的爱人)回复于 2005-03-05 11:03:06 得分 0

他编译的时候我在旁边看着就是可以啊,而且表明局部静态变量对程序没有影响,我们还专门把static   int   x=0;  
  改成了,static   int   x;  
  结果就是能正确编译啊,我在dev   c++里边也能正确编译Top

6 楼utstar(Universal Light)回复于 2005-03-05 14:00:35 得分 0

c程序可以不事先声明,也可以没有返回值  
  Top

7 楼languagec(各有所求)回复于 2005-03-05 14:52:29 得分 5

程序本身没有错,在tc   下编译是可以通过的,VC6   下需要声明函数类型  
  静态变量没有初始化都默认为0,所以函数都输出1Top

8 楼shuihan84(shuihan84)回复于 2005-03-05 15:11:10 得分 0

哦?可以不事先声明??  
  学习ingTop

9 楼linhai1978(林)回复于 2005-03-05 17:02:11 得分 0

我觉得是静态变量用的有问题,因为在c中的静态变量外部是看不到的;而c++中表示的静态变量只是表示值是静态的.还有希望大家看程序之后最好调试一下.那样会清楚很多.程序编译可以通过的.Top

10 楼linhai1978(林)回复于 2005-03-05 17:04:00 得分 0

当时面试官问我x在内存中是怎么样的.我闷了~郁闷呀~本人不太了解内存~Top

11 楼lunarking(工工)回复于 2005-03-05 19:41:24 得分 0

K&R   c   是能编译的,   ANSI   C是不能编译的,老大,人家其实是想问你static的用法.你好好看看书吧.Top

12 楼utstar(Universal Light)回复于 2005-03-05 20:32:14 得分 0

c编译器应该都能编译,否则就是不符合标准.c++编译器不能通过Top

13 楼packer(宇)回复于 2005-03-05 20:50:20 得分 0

ding  
  Top

14 楼sct()回复于 2005-03-05 20:56:12 得分 0

来看看高手们如何解答Top

15 楼gcg50290395()回复于 2005-03-05 21:12:57 得分 0

如果不声明,要写在主函数的前面才可以,最好是先声明。Top

16 楼onepence(分文不值)回复于 2005-03-05 21:30:46 得分 0

是不是static   变量x不在堆上,也不在栈上,而是在专门存储静态变量和全局变量的区域中啊。Top

17 楼wgb1314(wgb1314)回复于 2005-03-05 22:35:26 得分 0

此程序用VC++可通过,结果:111  
        只是有6个warnings:3个函数没有声明,没有返回值。  
        3个局部静态变量并无问题,它们互不影响。/Top

18 楼hjy82919(水心)回复于 2005-03-05 22:39:48 得分 5

static的生存期将延续到整个程序的终止.在内存数据区分配空间,在整个程序运行过程中不再释放.多次运行事更改,只维持原状,不再做赋初值操作.所以X=0Top

19 楼hpu8510(赫赫)回复于 2005-03-06 10:33:41 得分 0

static是静态变量,它在内存中是存在静态存储区的,所谓静态存储就是指在程序运行期间分配固定的存储空间的方式。静态变量的值在函数调用结束后不消失而保留原值。Top

20 楼jinqingli109()回复于 2005-03-06 11:41:11 得分 0

在c编译器编译器中可以调试运行  
  静态变量   不是该程序的错误之处  
  具体错在那我也不知道  
  Top

21 楼xl5338870(xlix)回复于 2005-03-06 11:58:53 得分 5

1。静态变量是编译期决定的,放在.data节中,初始化是由c运行时执行的,不同于局部变量。  
  2。函数中的静态变量作用域只限于该函数内部。  
  3。这三个函数中的静态变量不同,也就是有三个。Top

22 楼jack0369(木头)回复于 2005-03-06 12:57:04 得分 0

赞同:  
  syd1207(小虫)  
   
   
  #include   <stdio.h>  
   
  void   a();  
  void   b();  
  void   c();  
   
  int   main()  
  {  
          a();  
          b();  
          c();  
  return   0;  
  }  
   
  void   a()  
  {  
          static   int   x=0;  
          if(x==0)  
          {  
  x=1;  
          }  
          printf("%d",x);  
  }  
   
  void   b()  
  {  
          static   int   x=0;  
          if(x==0)  
          {  
  x=1;  
          }  
          printf("%d",x);  
  }  
   
  void   c()  
  {  
          static   int   x=0;  
          if(x==0)  
          {  
  x=1;  
          }  
          printf("%d",x);  
  }  
   
  Top

23 楼zjraycj(无名)回复于 2005-03-06 13:17:13 得分 0

在老式的C程序中,可以不用声明函数,默认为int型。static修饰的局部变量无须初始化,默认值为0,而且只初始化一次,以后再用到的话就是该变量最后一次所存储的值,直到程序结束才释放。3个X在内存中分别占用三个位置,互不相干。不过最好在函数中有一个return语句,因为函数已经默认为返回一个整形值了。Top

24 楼utstar(Universal Light)回复于 2005-03-06 13:36:53 得分 5

不是老式不老式的问题,因为历史原因,最新的c99标准也是允许不用声明函数的,否则将会break难以计数的c程序。比如下面的程序用gcc   -std=c99一样可以编译通过,只不过有几个warning而已  
   
          main()  
          {  
                  f1();  
          }  
   
          f1(int   p1)  
          {  
          }Top

25 楼liangyouyi(阿虎)回复于 2005-03-06 13:56:16 得分 0

我同意楼上的关于有三个静态变量的说法,函数体内的静态变量屏蔽了外面的静态变量,所以这个程序中其实有3个静态变量!Top

26 楼flying_dancing(小混混-_-)回复于 2005-03-06 18:29:07 得分 0

#include   <iostream>  
  using   namespace   std;  
  void   a();  
  void   b();  
  void   c();  
  void   main()  
  {        
          a();  
          b();  
          c();  
  }  
   
  void   a()  
  {  
          static   int   x=0;  
          if(x==0)  
          {  
  x=1;  
          }  
          cout<<x<<endl;  
  }  
   
  void   b()  
  {  
          static   int   x=0;  
          if(x==0)  
          {  
  x=1;  
          }  
        cout<<x<<endl;  
  }  
   
  void   c()  
  {  
          static   int   x=0;  
          if(x==0)  
          {  
  x=1;  
          }  
        cout<<x<<endl;  
  }  
  原本程序有问题,上面说的也有道理......我同意:静态的有固定的存储空间Top

27 楼qifa(DoItNow)回复于 2005-03-07 14:54:01 得分 0

静态变量是存放在数据区的Top

28 楼VxD1(Dump)回复于 2005-03-07 15:03:23 得分 0

#include   <stdio.h>  
  void   a()  
  {  
          static   int   x=0;  
          if(x==0)  
          {  
  x=1;  
          }  
          printf("%d",x);  
  }  
   
  void   b()  
  {  
          if(x==0)  
          {  
  x=1;  
          }  
          printf("%d",x);  
  }  
   
  void   c()  
  {  
          if(x==0)  
          {  
  x=1;  
          }  
          printf("%d",x);  
  }  
   
  void   main()  
  {  
          a();  
          b();  
          c();  
  }  
  Top

相关问题

  • 一道面试题
  • 一道面试题????
  • MICROSOFT 面试题一道
  • 一道面试题
  • 一道面试题!
  • 一道面试题
  • 一道面试题
  • 一道面试题
  • 一道面试题
  • 一道面试题

关键词

  • c++
  • 函数
  • 编译
  • 编译器
  • 内存
  • 静态变量
  • 程序
  • 声明
  • 初始化
  • 运行

得分解答快速导航

  • 帖主:linhai1978
  • languagec
  • hjy82919
  • xl5338870
  • utstar

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo