zoukankan      html  css  js  c++  java
  • 全局函数中的static变量问题

    现有:
    //teststatic.cpp

    void TestStatic(int nCopy)
    {
       static int a = nCopy;
       cout << a << endl;
    }

    int main()
    {
       TestStatic(1);
       TestStatic(2);
    }

    结果:
    1
    1
    press any key to continue

     问题是:为什么这样的结果??

     回复内容
    【taodm】:
    static变量就这样的啊,只初始化一次。

    【lj860603】:
    static还有全局变量只能定义一次,初始化一次

    【Chiyer】:
    那你要什么样子

    static 只在调用第一次的时候初始化

    所以

       TestStatic(1);     // 这个函数初始化a 为1
       TestStatic(2);    // 这次调用就不用初始化了

    你调换一下顺序就知道了

     TestStatic(2);   
       TestStatic(1);

    结果应该是 
    2
    2    



    【todototry】:
    static变量初始化了之后,再次进入函数的时候,保持原的值的

    【guangmingshizhe】:
    static变量只定一一次,但是可以重新赋值


    static int test = 10;

    void TestStatic(int nCopy)
    {
    test = nCopy;
    cout << test << endl;
    }


    TestStatic(20);
    TestStatic(30);

    结果就是20  30

    【eduyu】:
    void TestStatic(int nCopy)
    {
       static int a = nCopy;  //这句话是初始化,不是赋值,由于static变量只能被赋值一次
                              //第二次进入这个函数,这句话可以认为“不会被执行”。

       //加这句,这句话是赋值,每次进入这个函数都会被执行。
       a=nCopy;

       cout << a << endl;
    }

    int main()
    {
       TestStatic(1);
       TestStatic(2);
    }

    【eduyu】:
    抱歉,打快了,不是被“赋值一次”是 “被初始化一次”。

    ok,你再看看结果。

    【yuyunliuhen】:
    static只能初始化一次

    【erac】:
    static初始化一次,如果不对其进行修改还是原来的值。

    【clxye】:
    恩,这个问题问的好。学习了。

    【jsjszg】:
    对的.虽然调试的时候每次都经过初始化那一行,但并没有初始化.(除了第一次)

    【Aaron_Jerry】:
    TestStatic(1);
    TestStatic(2);
    输出的是同一个内存地址里的值

    具体见:
    http://dev.csdn.net/author/haoel/f10d3532658744ab87e4d4a000091b81.html

    【Vitin】:
    简单地说,应该这样写:
    void TestStatic(int nCopy)
    {
       static int a;
       a = nCopy;
       cout << a << endl;
    }


    【qwerasd1234】:
    void TestStatic(int nCopy)
    {
       static int &a = nCopy;
       cout << a << endl;
    }

    int main()
    {
       TestStatic(1);
       TestStatic(2);
       return 0;
    }
  • 相关阅读:
    windows下Graphviz安装及入门教程
    安装配置Xdebug模块详解
    Git结合tar自动打升级包
    git stash命令详解
    redis启动出错Creating Server TCP listening socket 127.0.0.1:6379: bind: No error(转)
    航司二字码
    BeanCreationException: Error creating bean with name 'classPathFileSystemWatcher'之解决办法
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext之解决办法
    Postman测试后台使用@RequestBody接收参数的坑
    Idea必知必会
  • 原文地址:https://www.cnblogs.com/carbs/p/2440531.html
Copyright © 2011-2022 走看看