注册 登录
编程论坛 C++教室

[求助]新手的简单问题-----关于static的用法

a19870502 发布于 2007-12-05 20:55, 1433 次点击
#include <iostream>
using namespace std;

void fun(void){
 static int a=10;
a++;
}

int main(){
  for(int i=0;i<5;i++)
 cout<<a++<<endl;
 return 0;
}

static不是说有全局变量的用法吗?那为什么编译的时候会提示说没有声明a呢?
麻烦各位啦。
9 回复
#2
blueboy820062007-12-05 22:09
#include <iostream>
using namespace std;
static int a=10;
void fun(void){

a++;
}

int main(){
  for(int i=0;i<5;i++)
cout<<a++<<endl;
return 0;
}
这样就可以,不清楚你那个fun函数是干什么用的,没有调用...

[[italic] 本帖最后由 blueboy82006 于 2007-12-5 22:20 编辑 [/italic]]
#3
blueboy820062007-12-05 22:10
执行不到这句哦,static int a=10;
#4
leeco2007-12-06 12:52
static变量的生存周期是全局的,但并不是全局可见,如果要在外部访问可以通过指针。
但为什么要这么做呢?
#5
lonmaor2007-12-06 16:15
static前缀只是说明定义的变量在整个程序运行周期都存在。
举个简单例子:
int main()
{
    while(1)
    {
        foo();
        ...
    }
}

void foo(void)
{
    static int a=0;
    a++;
}

foo()定义了一个static int型的变量a,如果不加static前缀,则视其为自动变量,也就是说,每次运行到这里的时候,都会给a赋值0。
main()函数中循环调用了foo(),
第一次call foo()时,初始化a=0;
第二次call时,因为a是static int型的,故不再重复初始化,可认为跳过 static int a=0; 这条语句直接进入下条语句。
#6
a198705022007-12-06 22:09
原帖由 [bold][underline]lonmaor[/underline][/bold] 于 2007-12-6 16:15 发表 [url=http://bbs.bc-cn.net/redirect.php?goto=findpost&pid=1134465&ptid=190625][/url]
static前缀只是说明定义的变量在整个程序运行周期都存在。
举个简单例子:
int main()
{
     while(1)
     {
          foo();
          ...
     }
}

void foo(void)
{
     static int a=0;
     a++;
}

foo()定义了一个static int型的变量a,如果不加 ...


那是不是就是说如果在main()中输出a的值,a只会等于0?
#7
a198705022007-12-06 22:11
原帖由 [bold][underline]blueboy82006[/underline][/bold] 于 2007-12-5 22:09 发表 [url=http://bbs.bc-cn.net/redirect.php?goto=findpost&pid=1133213&ptid=190625][/url]
#include
using namespace std;
static int a=10;
void fun(void){

a++;
}

int main(){
  for(int i=0;i


我只是想知道用了static修饰的变量的可见性同生存期是怎么一回事而已~~~谢谢。
#8
chengyukyo12007-12-07 20:29
看c语言p 181 页谢谢 系统学下下把
#9
lonmaor2007-12-07 21:17
5#发的程序段你循环5次试下。
第一次循环,a=0,第二次循环,不再对a进行初始化,a=1。。。
如果没有加static,再试一次,看看结果有什么不同。
#10
a198705022007-12-10 13:04
多谢各位!!!
1