c++生存期和可见性问题

主函数中的a和other函数的a都是static,第一次输出I1 a0 b-10 c0
第二次调用了other a为什么会被赋植 第二次输出是i33 a4 b0 c15
第三次为什么(在第二次调用other 后把 a的值给了b而且a和b都是静态的 还被改变了?)输出结果是i33 a0 b-10 c8
第四次i75 a6 b4 c15

第1个回答  推荐于2016-06-16
other函数是看不到外层作用域的变量的,因为它并没有被传递参数:
1、void other(void);这条语句只是一个函数声明,并不是调用
2、静态局部变量只在函数内可见
3、静态局部变量只会定义一次,所以other函数的a、b一开始初始化为2、0
4、other函数也有输出,它输出的是自身的a、b数据
5、i是全局变量,该文件都可见
6、这边静态的意思指的是程序运行期间该变量一直存在,但是只在它存在的作用域内有效,并不代表他不能被修改,不能修改的关键字是const追问

#include<iostream.h>

void fun();

void main()

{fun();

fun();

cout<<a<<endl;}

void fun()

{static int a=1;

int i=5;

a++;

i++;

cout<<"i="<<i<<"a="<<a<<endl;}

2、静态局部变量只在函数内可见

你说主函数的a是多少?

追答

你没看到你写的函数都报错了吗

本回答被提问者和网友采纳

C++中变量可见性问题的怎么理解
你在屋子里面可以看见屋子里面的所有可以看的点的东西,当你走出屋子之后,你会发现,本来你在屋子里面可一看的见的东西在外面就看不见了,屋里面的东西相当与一个一个变量而屋外的东西可以和屋内的东西相同但是你能看的见,并且你可以看到更多的东西,这也就相当于变量的位置决定了变量的可见性。

一文带你了解static 和const
本文将深入解析C++中的两个关键修饰符:static和const,帮助理解它们的作用和用法。静态修饰符(static)静态修饰符的主要作用是控制变量的存储方式和可见性。它指示编译器将变量存储在静态存储区,而非栈空间。这解决了函数内局部变量值持久的问题,同时保持了其作用范围不变。对于类的静态成员,它们提供了...

局部静态变量的可见性是怎样的?
回答:1、作为静态变量,它始终有固定的存储空间,从程序开始到程序结束整个生命周期。2、作用域仅限于局部区域,只有在定义自己的函数体内可见。 更多关于变量的信息: ================= 静态全局变量和静态局部变量 C、C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:...

VC+++ 全局变量的定义
对局部变量的影响是修改了生存期,此时局部变量就存储在静态数据区,只是说可见性仍然是函数内部,所以,从存储区即生存期和可见性即作用域两方面来讲,可以用一句话概括Static对全局和局部变量的影响:全局变量是存储在静态数据区的,可见性为整个程序,加上static后,可见性为当前的文件,存储区不变,局...

c++问题,高手来
作用域和可见性是不分家的。myclass p[10]声明得是一个10个元素的对象数组,意思就是数组元素是类的对象。当p离开作用域的时候,当然要销毁在内存中占用的空间,而p是一个数组指针,所以整个数组的10个元素都会消耗(遇到ASCII码为0的停止),而每个元素又是对象,对象销毁时,自动调用类的析构函数...

如何编写高质量的代码!
一个人存在但不可见只能解释成上帝或灵魂,一个变量存在但不可见却并非咄咄怪事,模块化方法正是利用了静态函数、静态变量这些“精灵”们特殊的生存期与可见性。最后需要明确一点的是这里的模块是以一个.C文件为单位。规则一:利用函数命名规则和静态函数模块中不被其他模块调用的内部函数采用以下命名规则:用全部小写,...

谁能告诉下C++中成员变量的可见性,最好能举例说明下
Base(int a=0,int b=0,int c=0){i=a;x=b;y=c;} void add(){i++;} int x;protected:\/\/定义保护成员,在类外与私有成员类似,但在派生时能被派生类继承 void addTwo(){i+=2;} int y;private:\/\/定义私有成员,类外不能访问,不被派生类继承 \/\/(书本说被继承了不能被访问,我...

c和c++的volatile关键字为什么给编程者造成了如此大的
探讨C和C++中的volatile关键字,为何对编程者产生巨大影响,需从其本质出发。volatile关键字主要解决在多线程环境下的数据可见性问题,确保对共享变量的操作能反映实际状态,避免编译器优化带来的副作用。编程者在实践中发现,此关键字能解决某些特定场景下程序的正确性问题,逐渐形成使用习惯。原因一:无知者...

c#类对com的可见性什么意思
简单的说就是你的托管代码是否允许非托管代码调用。这个涉及到.NET的平台互操作问题。比如,C#可以调用C\\C++写的DLL,也可以操纵MS Office的组件这就称之为互操作(Invoke)。那么如果你也想让C\\C++也来调用你的C#写的程序,此时就需要开放你的类为对COM可见性。通常的做法是:[ComVisible(true)]public...

static在C++中的详解
static 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性,下面我将从 static 修饰符的产生原因、作用谈起,全面分析static 修饰符的实质。static 的两大作用:一、控制存储方式:static被引入以告知编译器,将变量存储在程序的静态存储区而非栈上空间。1、引出原因:函数内部定义的变量,在...

相似回答
大家正在搜