C++中静态生存期和动态生存期的区别
还有下面这个程序,谁能帮忙解释下不#include<iostream>usingnamespacestd;inti=1;intmain(){staticinta;intb...
还有下面这个程序,谁能帮忙解释下不
#include <iostream>
using namespace std;
int i=1;
int main()
{
static int a;
int b=-10;
int c=0;
void other(void); //这个是什么意思
cout<<"--MAIN--"<<endl;
cout<<"i="<<i<<" a="<<a<<" b="<<b<<" c="<<c<<endl;
c=c+8;
other(); //这个又有什么作用
cout<<"--MAIN--"<<endl;
cout<<"i="<<i<<" a="<<a<<" b="<<b<<" c="<<c<<endl;
i=i+10;
other(); //然后这再是做什么
}
void other(void)
{
static int a=2;
static int b;
int c=10;
a=a+2;
i=i+32;
c=c+5;
cout<<"--OTHER--"<<endl;
cout<<"i="<<i<<" a="<<a<<" b="<<b<<" c="<<c<<endl;
b=a;
}
希望能解释详细点哦,呵呵 展开
#include <iostream>
using namespace std;
int i=1;
int main()
{
static int a;
int b=-10;
int c=0;
void other(void); //这个是什么意思
cout<<"--MAIN--"<<endl;
cout<<"i="<<i<<" a="<<a<<" b="<<b<<" c="<<c<<endl;
c=c+8;
other(); //这个又有什么作用
cout<<"--MAIN--"<<endl;
cout<<"i="<<i<<" a="<<a<<" b="<<b<<" c="<<c<<endl;
i=i+10;
other(); //然后这再是做什么
}
void other(void)
{
static int a=2;
static int b;
int c=10;
a=a+2;
i=i+32;
c=c+5;
cout<<"--OTHER--"<<endl;
cout<<"i="<<i<<" a="<<a<<" b="<<b<<" c="<<c<<endl;
b=a;
}
希望能解释详细点哦,呵呵 展开
1个回答
展开全部
你的程序这样理解. 一开始int i的声明放在main外面,程序最上面,是做为全局变量的. 所以可以被main函数和other函数调用,生存期是整个程序. 加static的是静态变量声明,生存期是整个程序.注意的是静态声明如果不给初始值,默认是0.动态不给初始值的话就返回储存单元内容,也就是随机值. 动态变量的生存期仅限于所在的函数. 如果在main函数里没什么区别,因为main函数从开始到结束就是整个程序的开始到结束,但如果在其他函数中则会有区别,比如在你的程序的other函数里,a和b都是静态函数,当程序第一次运行时会初始化,之后再次调用时就不会再进行初始化了,依然保留上次运行后的结果,而c变量是动态变量,每当other函数调用一次时都会被初始化,在你的程序里是初始化为10.
另外注意不同函数中,各自所声明的变量,就算名字一样,作用域却是不同的. 在main函数里修改的a变量,不会影响到other函数里的a变量. 在你的程序里有个例外. 就是变量i,前面说了,他是一个全局函数,作用域是整个程序.
另外你问
void other(void); 什么意思
这是对函数other的声明. 如果你other函数的定义写在main函数前面的话就不需要声明了,但因为你的程序other函数定义是写在main函数之后的,当main函数调用other函数时,编译器还没有读到之后的定义,就报错,所以需要用一个声明,告诉编译器,定义在后面. void表示无类型,无参数. 括号中的可以省略,也就是这句声明可以写成 void other();
你问的之后的两个 other(); 都是main函数在调用这个other函数, other函数的定义后面写了,说简单点就是在这里,运行other函数里的代码.
另外注意不同函数中,各自所声明的变量,就算名字一样,作用域却是不同的. 在main函数里修改的a变量,不会影响到other函数里的a变量. 在你的程序里有个例外. 就是变量i,前面说了,他是一个全局函数,作用域是整个程序.
另外你问
void other(void); 什么意思
这是对函数other的声明. 如果你other函数的定义写在main函数前面的话就不需要声明了,但因为你的程序other函数定义是写在main函数之后的,当main函数调用other函数时,编译器还没有读到之后的定义,就报错,所以需要用一个声明,告诉编译器,定义在后面. void表示无类型,无参数. 括号中的可以省略,也就是这句声明可以写成 void other();
你问的之后的两个 other(); 都是main函数在调用这个other函数, other函数的定义后面写了,说简单点就是在这里,运行other函数里的代码.
迈杰
2024-11-30 广告
2024-11-30 广告
RNA-seq数据分析是转录组研究的核心,包括数据预处理、序列比对、定量分析、差异表达分析、功能注释和可视化等步骤。数据预处理主要是质量控制和去除低质量序列。序列比对使用HISAT2、STAR等工具将reads比对到参考基因组。定量分析评估...
点击进入详情页
本回答由迈杰提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询