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

C++中的全局变量,您一定会吗?

楼主dlnet(不学无术)2004-09-03 22:47:04 在 C/C++ / C++ 语言 提问

若一个工程由两个文件组成,分别为file1,file2。在文件1中定义了全局变量n,在文件2中只要由这个变量的申明就可以使用,这个大家都知道,原因就是因为全局变量放到了程序的数据区,而数据区是属于整个程序中的所有的文件的,所以所有的文件都能“看得见”其他文件所定义的全局变量。但看看这段代码,再想一个问题。  
  //*******File1*******  
  #include   <iostream.h>  
   
  int   n;  
   
  void   Fun1InFile1(void)  
  {  
          n=100;  
          cout   <<   "n="   <<   n   <<   endl;  
  }  
   
  //******File2*******  
  #include   <iostream.h>  
  void   Fun1InFile1(void);  
  extern   int   n;  
  void   main()  
  {  
          Fun1InFile1();  
          cout   <<"n="   <<   n   <<   endl;   //statement   1  
  }  
          这个结果一个是100,而另一个是0(实质上应该是随机数)。实质上这里和多文件没有关系,即便Fun1InFile1()和main()再一个文件中,也是同样的结果。  
          但不知道大家想过没有这样一个问题:既然全局变量n再数据区存放,那么Fun1InFile1()和main()对n操作时是对同一个内存块操作,它们的数值应该是由连续性的,即statemnet   1也应该输出100才对呀!  
          是否可以这样理解,函数对全局变量的操作时候,实质上是对全局变量的一个临时拷贝操作,而没有对全局数据区的那个变量的内存块操作。若真是这样,就出现一个问题!临时拷贝都是常量,没有变量,而常量是不可能再赋值的那么“n=100”就不应该编译通过!  
  问题点数:20、回复次数:6Top

1 楼ma100()回复于 2004-09-03 22:56:33 得分 20

/*******     a.cpp       ******/  
  #include   <iostream.h>  
  int   n;  
  void   Fun1InFile1(void)  
  {  
  n=100;  
  cout   <<"n="   <<   n   <<   endl;   //statement   1  
  }  
   
  void   main()  
  {  
          Fun1InFile1();  
          cout   <<"n="   <<   n   <<   endl;   //statement   2  
  }  
  结果:  
  100    
  100Top

2 楼ma100()回复于 2004-09-03 22:57:48 得分 0

/**     a.cpp***/  
  #include   <iostream.h>  
  extern   int   n;  
  extern   void   Fun1InFile1();  
   
   
  void   main()  
  {  
          Fun1InFile1();  
          cout   <<"n="   <<   n   <<   endl;   //statement   2  
  }  
   
  /***     b.cpp***/  
  #include   <iostream.h>  
  int   n;  
  void   Fun1InFile1(void)  
  {  
  n=100;  
  cout   <<"n="   <<   n   <<   endl;   //statement   1  
  }  
   
  结果   :  
  100  
  100Top

3 楼dlnet(不学无术)回复于 2004-09-03 23:20:44 得分 0

不好意思,在一个文件中确实应该是由连续性的。  
  那么如何理解在两个文件中的情况!Top

4 楼ma100()回复于 2004-09-03 23:25:04 得分 0

两个文件中的情况见2楼?Top

5 楼dlnet(不学无术)回复于 2004-09-04 00:02:51 得分 0

没错!  
  Sorry!  
  胡涂了!Top

6 楼dreaminger(小锡)回复于 2004-09-04 00:22:07 得分 0

我用dev-C++运行了一下代码,两个都是输出100啊,没发现有输出0的。莫非楼主眼花了?  
  /*file1.cpp*/  
  #include   <iostream>  
  int   n;  
  using   namespace   std;  
  void   Fun1InFile1(void)  
  {  
          n=100;  
          cout   <<   "file1   n="   <<   n   <<   endl;  
  }  
  /*end   of   file1.cpp*/  
   
   
  /*main.cpp*/  
  #include   <iostream>  
  #include   <stdlib.h>  
  using   namespace   std;  
  void   Fun1InFile1(void);  
  extern   int   n;  
  int   main()  
  {  
          Fun1InFile1();  
          cout   <<"n="   <<   n   <<   endl;   //statement   1  
          system("PAUSE");      
          return   0;  
  }  
  /*end   of   main.cpp*/Top

相关问题

  • c#中怎样设置全局变量。
  • c#如何定义全局变量?
  • C++ 的全局变量问题!
  • 在c语言里,全局变量是不是静态变量
  • C中有没有全局变量和静态全局变量的说法?
  • 全局变量
  • 全局变量!!
  • 全局变量
  • 全局变量?
  • 全局变量

关键词

  • 文件
  • fun1infile
  • 全局变量
  • cout
  • extern
  • main

得分解答快速导航

  • 帖主:dlnet
  • ma100

相关链接

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

广告也精彩

反馈

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