标题:求指点,调用函数中出现主函数已有的变量
只看楼主
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
以下是引用flypanda999在2013-2-14 14:33:10的发言:

嗯嗯,我就是没法理解例题中说a是静态存储类变量,第一次调用结束后不释放,也不能被再次定义,而最上面书后习题中那段代码int a;是外部存储类变量,程序不结束不会释放,而为什么又可以被再次定义为静态存储类变量呢

这里好像不是你想的这个样子 而是 变量都有一个属性 而且是有且只有一个属性 要么是全局 要么是静态 要么是局部 而且有规定 有全局有局部默认用的是局部 也就是 一般来说默认用自己函数里面的而不是全局的 当然C++里也提供了访问全局的方式

代码说话

程序代码:
#include <iostream>

using std::cout;
using std::endl;

int a = 100;

void func(void)
{
    static int a = 2;
    cout << "这里我打出了a=" << a << endl;
    cout << "最后打出的是啥?" << endl;
}

int main(void)
{
    int a = 1;
    cout << "这里我打出了局部变量 因为默认情况下是用局部变量 a=" << a << endl;
    cout << "这里我打出了全局变量 a=" << ::a << endl;
    func();
   
    return 0;
}


这些东西是基础知识 记住就好了

这里我打出了局部变量 因为默认情况下是用局部变量 a=1
这里我打出了全局变量 a=100
这里我打出了a=2
最后打出的是啥?
2013-02-14 14:53
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
得分:0 
可以赋值啊

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

外部存储类变量的作用域是整个程序啊,怎么可以被再定义呢?(最上面那段代码中的int a)

这里牵扯的知识点是局部变量覆盖全局变量

这容易理解 函数是相对独立的 如果一旦有一个外部的变量 我这些函数都受影响了 那多不方便啊 所以 默认是先里后外
2013-02-14 14:55
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
得分:0 
是这样,  一般都不用全局变量的

仰望星空...........不忘初心!
2013-02-14 14:57
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
还有就是 楼主学的这个代码很不规范啊

比如

#include<iostream.h>

这个带.h的文件已经被抛弃了 很多编译器都不支持了罢

     int b=2;;;

这里又是啥。。

如果楼主想从事这方面的工作 建议找些好点的 规范的东西来学习。。
2013-02-14 14:57
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
其实我根本不会C++、、

还有一个问题 这里 没有什么namespace神马的么
2013-02-14 14:59
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
得分:0 
这里交给我吧....一般来说是不用namespace,但是输入和输出流中要加上std::,这样就显得很麻烦。。。。接着就出现了using namespace std;
这个在后面的输入和输出就只要写cin 和 cout了

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

这里交给我吧....一般来说是不用namespace,但是输入和输出流中要加上std::,这样就显得很麻烦。。。。接着就出现了using namespace std;
这个在后面的输入和输出就只要写cin 和 cout了
那为啥他的代码也没 namespace 也没std 好像是能编译过呢

我琢磨 要么是iostream.h的问题 要么是VC6的问题
2013-02-14 15:10
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
得分:0 
我想他应该把C++和C和在一起了.....因为大部分的程序C和C++都是兼容的

仰望星空...........不忘初心!
2013-02-14 15:13
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
得分:0 
一般这2种是比较规范的
第一:将头文件stdio.h 改为cstdio  然后写法和C一模一样
第二:将头文件stdio.h改为iostream
再用using namespace std;
再用cin 和 cout

仰望星空...........不忘初心!
2013-02-14 15:16



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




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

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