标题:求指点,调用函数中出现主函数已有的变量
只看楼主
flypanda999
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-2-10
结帖率:100%
已结贴  问题点数:10 回复次数:24 
求指点,调用函数中出现主函数已有的变量
首先拜个晚年。我是个无任何基础的初学者,用的是吕凤翥的《c++语言程序设计》,课后习题里有这么一段代码:

#include<iostream.h>
int a;
void main()
{
     int b=2;;;
     cout<<a<<','<<b<<endl;
     {
        int b;
        static int a=5;
        cout<<a<<','<<endl;
        a=10;
        b=10;
        cout<<a<<endl;
     }
     b=8;
     cout<<a<<','<<b<<endl;
}
在VC++上实验等效于下面一段代码:
#include<iostream.h>
int a;
void fun();
void main()
{
int b=2;
cout<<a<<','<<b<<endl;
fun();
b=8;
cout<<a<<','<<b<<endl;
}
void fun()
{
int b;
static int a=5;
cout<<a<<','<<endl;
a=10;
b=10;
cout<<a<<endl;
}
我不明白的是:在同一个源文件中a如何能定义两次,而且还是两种不同的存储类。很是困惑,请高人帮我指点下迷津。
搜索更多相关主题的帖子: void include 
2013-02-14 13:18
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:5 
同一个源文件中a如何能定义两次,而且还是两种不同的存储类。

你看的那个书里面讲不讲变量的类型呢 变量可以有类型的 比如 auto global static 你这里 两个a的类型不一样 一个是static 一个是全局变量也就是global


[ 本帖最后由 zklhp 于 2013-2-14 13:30 编辑 ]
2013-02-14 13:28
flypanda999
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-2-10
得分:0 
回复 2楼 zklhp
之前有一道例题:
#include<iostream.h>
void fun();
void main()
{
  fun();
  fun();
}
void fun()
{
  int a=5;
  a=2*a;
  static int b=10;
  b=2*b;
  cout<<a+b<<endl;
}
结果是30
      50
分析中一说第次调用fun()结束时b的值仍保留,等到第二次调用时b的值不能被再次定义了。为什么这里就不能再次定义,而之前我问的那段里就可以再次调用呢?多谢
2013-02-14 13:47
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
得分:5 
首先第一次算出来是50是很明显的是吧,第2次b=20不变 即20 * 2 + 10 = 50就可以解决了

仰望星空...........不忘初心!
2013-02-14 13:50
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
得分:0 
所谓2个a其实是不同的,一个是全局变量,一个是局部变量,但是在全局变量和局部变量相同时,只有局部变量起作用

仰望星空...........不忘初心!
2013-02-14 13:52
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
以下是引用flypanda999在2013-2-14 13:47:38的发言:

之前有一道例题:
#include
void fun();
void main()
{
  fun();
  fun();
}
void fun()
{
  int a=5;
  a=2*a;
  static int b=10;
  b=2*b;
  cout<

这个就是 static 的用法演示 认真看书去罢、、、
2013-02-14 14:05
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
得分:0 
。。。。

仰望星空...........不忘初心!
2013-02-14 14:07
flypanda999
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-2-10
得分:0 
回复 6楼 zklhp
嗯嗯,我就是没法理解例题中说a是静态存储类变量,第一次调用结束后不释放,也不能被再次定义,而最上面书后习题中那段代码int a;是外部存储类变量,程序不结束不会释放,而为什么又可以被再次定义为静态存储类变量呢
2013-02-14 14:33
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
得分:0 
      这要看局部变量的作用域了,如果超过局部变量的作用域,就可以从新定义

仰望星空...........不忘初心!
2013-02-14 14:35
flypanda999
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-2-10
得分:0 
回复 9楼 Susake
外部存储类变量的作用域是整个程序啊,怎么可以被再定义呢?(最上面那段代码中的int a)
2013-02-14 14:52



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-398588-1-1.html




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

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