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;
    }
  • 相关阅读:
    Mac下终端常用命令
    mac上完整卸载删除.简单粗暴无脑:androidstudio删除方案
    Mac版 Intellij IDEA 激活
    解决Pods Unable to find a specification for `xxxxx`问题
    java并发编程(十五)内存可见两种方式 加锁和volatile
    java并发编程(五)正确使用volatile
    java并发编程(十四)同步问题的内存可见性
    java并发编程(十三)经典问题生产者消费者问题
    java并发编程(十三)线程间通信中notifyAll造成的早期通知问题
    java并发编程(十一)线程间的通信notify通知的遗漏
  • 原文地址:https://www.cnblogs.com/carbs/p/2440531.html
Copyright © 2011-2022 走看看