zoukankan      html  css  js  c++  java
  • [C++] asd

    函数的作用域不能是局部的,因为那样的函数无法被外部调用。

    函数被调用时,自动变量被存放在栈中,栈中变量的数量随着被调用函数的运行增减,当被调用函数返回后,栈恢复到调用前的状态(自动变量随着函数的返回而消失)。在C++11中,寄存器变量已经失去意义,等于自动变量,保留该关键字只不过是防止使用错误。

    自动变量无链接属性,而静态变量有三种:外部、内部、无链接,静态变量的数目在程序运行期间是保持不变的,所以不需要栈来处理静态变量,但是需要一块特定的内存来存储静态变量,如果静态变量未被初始化,则编译器将给其付默认值0,例如一个静态的数组,所有的元素都会被赋值为0。对于静态变量来说,在函数中声明的没有链接属性,在函数外部声明的具有内部链接属性,带有extern修饰符的具有外部链接属性,但是这三者在程序的运行期间一直存在。

    自动、寄存器、静态无链接、静态内部链接、静态外部链接形成了五种变量存储方式。

    外部变量是在所有的函数外部定义的变量,对于所有的函数来说,其都是外部的,因此可以在main函数之前声明外部变量,在声明之后的所有函数中都可以通过声明然后被当作外部变量使用,因此外部变量又称为全局变量。单定义规则:变量只能被定义一次,其他使用的地方只能声明,注意定义和声明的区别。

    //main.cpp
    #include <iostream>
    using namespace std;
    
    double val = 0.3;
    
    void update(double dt);
    void local();
    
    int main()
    {
        cout<<"global val:"<<val<<endl;
        update(0.1);
        cout<<"global val:"<<val<<endl;
        local();
        cout<<"global val:"<<val<<endl;
    
        return 0;
    }
    
    
    //extern.cpp
    #include <iostream>
    using namespace std;
    
    extern double val;
    
    void update(double dt);
    void local();
    
    void update(double dt)
    {
        extern double val;
        val += dt;
        cout<<"update global val:"<<val<<endl;
    }
    
    void local()
    {
        double val = 0.8;
        cout<<"local val:"<<val<<endl;
        cout<<"global val:"<<::val<<endl;
    }

    内部链接属性

    //test1.cpp
    #include <iostream>
    using namespace std;
    
    int val = 20;
    int vald = 3;
    static int harry = 300;
    
    void access();
    
    int main()
    {
        cout <<"val addr:"<< &val << endl;
        cout <<"vald addr:"<< &vald << endl;
        cout <<"harry addr:"<< &harry << endl;
        access();
    
        return 0;
    }
    
    //test2.cpp
    #include <iostream>
    using namespace std;
    
    extern int val;
    static int vald = 10;
    int harry = 200;
    
    void access()
    {
        cout <<"val addr:"<< &val << endl;
        cout <<"vald addr:"<< &vald << endl;
        cout <<"harry addr:"<< &harry << endl;
    }

    val具有外部属性,在两个文件中操作的是同一个变量,而其他两个都不是,操作的不是用一个变量。

    #include <iostream>
    using namespace std;
    
    const int size = 10;
    
    void strcount(const char *str);
    
    int main()
    {
        char input[size];
        char next;
        cout <<"Enter a line:"<< endl;
        cin.get(input,size);
        while(cin)
        {
            cin.get(next);
            while(next != '
    ')
                cin.get(next);
            strcount(input);
            cout <<"Enter a new line:"<< endl;
            cin.get(input, size);
        }
        cout << "bye
    ";
        return 0;
    }
    
    void strcount(const char *str)
    {
        static int total=0;
        int count=0;
    
        cout<<"""<<str<<"" contains ";
        while(*str++)
            count++;
        total += count;
        cout<<"count:"<<count<<endl;
        cout<<"total:"<<total<<endl;
    }
  • 相关阅读:
    模态对话框可能导致程序崩溃
    C++实现将字符串循环左移n个位置
    Android Gallery图片显示和文字提示及Menu 菜单
    android代码实现ScaleAnimation
    Android系统内存管理的问题
    android打电话发短信
    android开发之屏幕设置
    输入法
    黄金周
    气筒
  • 原文地址:https://www.cnblogs.com/ingy0923/p/8671299.html
Copyright © 2011-2022 走看看