zoukankan      html  css  js  c++  java
  • ios 各种变量和作用范围

    根据储存位置不同,可以分为,静态变量(静态储存区),动态变量(运行时堆栈),寄存器变量(寄存器)

    静态变量(静态储存区):全局变量和使用static声明的局部变量都是静态变量,在系统运行过程中只初始化一次。#include <stdio.h>

    
    int a=1; //全局变量存储在静态内存中,只初始化一次
    
    void showMessage(){
        static int b=1; //静态变量存储在静态内存中,第二次调用不会再进行初始化
        int c=1;
        ++b;
        a+=2;
        printf("a=%d,b=%d,c=%d
    ",a,b,c);
    }
    
    int main(int argc, const char * argv[]) {
        showMessage(); //结果:a=3,b=2,c=1
        showMessage(); //结果:a=5,b=3,c=1
        return 0;
    }

    解释:

    全局变量,作用域在自己的类里,类实现的各处均可调用。储存在静态区

    局部变量,作用域在一个方法里,方法结束,变量销毁。储存在动态区,储存在栈中。

    自动变量;不含有static的局部变量,储存在栈中。

    static修饰的变量;静态变量,作用域为本类(如果其他类调用该变量的同名变量,不会报错。)修饰函数,为内部函数,外部调用会报错。

    extern修饰的变量:申明一个已经存在的变量,只是声明,没有初始化。extern修饰函数,是声明和定义函数为外部函数,可以省略,所以所有的函数都默认为外部函数。

    单例是全局变量,因为单例在整个程序运行期间只被创建初始化一次,因此单例只保存一个对象,如果在A类中创建单例,那么在B类中再次创建单例的话,单例仍然保持着A类中得对象,单例对象的各种状态就依然保存着A类运行之后的状态。(比如一个播放器对象Player,是一个单例,你在A类中设置Player.playing = YES;之后跳转到B类,再次创建Player对象,Player.playing属性仍然是YES,不会因为重新创建而默认为nil);

    重载就是重新加载,就是重新alloc。

    总结

    最后做一下简单总结一下:

    1. extern作用于变量时用于声明一个已经定义的变量,但是并不能定义变量;使用extern你可以在其他文件中使用全局变量(当然此时extern可以省略);
    2. extern作用于函数时与它作用于全局变量有点类似,声明这个函数是外部函数,其他文件可以访问,但不同的是当它作用于函数时不仅可以声明函数还可以定义函数(用在函数定义前面),不管是定义还是声明都可以省略,C语言默认认为函数定义或声明都是外部函数;
    3. static作用于变量时,该变量只会定义一次,以后在使用时不会重新定义,当static作用于全局变量时说明该变量只能在当前文件可以访问,其他文件中不能访问;
    4. static作用于函数时与作用于全局变量类似,表示声明或定义该函数是内部函数(又叫静态函数),在该函数所在文件外的其他文件中无法访问此函数;
    5. 参考http://www.cnblogs.com/kenshincui/p/3854243.html
  • 相关阅读:
    201771030125-王英雪 实验一 软件工程准备一<构建之法与博客首秀>
    201771010102-常惠琢 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告
    201771010102-常惠琢 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告
    软件工程第四次作业
    软件工程第三次作业
    软件工程第二次作业
    软件工程第一次作业
    201771030104-道彤阳 实验四 软件项目案例分析
    201771030104-道彤阳 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告
    201771030104-道彤阳 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告
  • 原文地址:https://www.cnblogs.com/rankilau/p/4375157.html
Copyright © 2011-2022 走看看