作用域随笔

/*
变量类型:按照存储方式
1.局部变量(声明在函数内的变量)
2.全局变量(声明在函数外的变量)

变量的类型:按照生命周期(变量在内存中存在的时间)
1.静态生命期:全局变量,和静态的局部变量(在编译期间就存在,直到整个程序终止)
2.自动生命期:非静态的局部变量.
3.动态生命期:使用动态内存分配函数去申请的变量

作用域:
1.文件作用域:全局非静态变量(整个工程内部都可以使用)
全局静态变量(在本文件的声明处开始,一直到文件尾部)
2.函数作用域:局部变量(静态和非静态),作用范围:声明处开始,一直函数结尾.
3.函数的参数的作用域:作用整个函数.
4.块作用域:函数体中出现的一对{}之内的变量,作用范围仅仅在该块内.

static:
1.static修饰全局变量,改变了该全局变量的作用域,从整个工程可以被访问,变成只能本文件被访问.
2.static修饰局部变量,改变来该变量的声明周期,从自动的生命周期变成静态生命周期.
3.static修饰函数,改变函数的作用范围,只能在本文件去调用函数,其他文件不能调用.
4.static修饰局部变量,在其函数被调用时候,初始化只执行一次.
*/

#include <stdio.h>

//static int a;
void foo(int a) //a整个函数
{
    int b;
    {
      static int c;
       // c = 10;
    }

c = 10;

void uplooking() //c99标准之后允许函数嵌套
    {
        printf("%s\n", __func__);
    }
    
    uplooking();
    extern d;
    printf("d = %d\n", d);
 //   c = 10;
    
}

static void func()
{
    printf("hello world\n");
}

int main()
{
    foo(1);
    test();
    test();
    test();
    return 0;
}

时间: 2024-12-16 07:19:36

作用域随笔的相关文章

js随笔-变量作用域

1.函数中定义的变量只在函数中起作用,所以两个函数定义相同的变量互不影响 function fun(){ var i=0 } console.log(i);//i is not defined 2. 函数中内嵌函数时,内部的函数可以访问外部函数的变量,外部函数则不能访问内部的变量 function fun(){ var i=0; function fun2(){ var j=1; console.log(i); } fun2(); } fun();//0 function fun(){ var

JavaWeb学习随笔

Servlet学习随笔 1.HttpServlet init(ServletConfig)------Servlet生命周期中的初始方法,默认情况是服务器创建后第一次访问这个Servlet时调用,可以修改配置信息,使其在服务器一创建时就被调用; 修改配置信息的方法-----在web.xml的<servlet>下添加<load-on-startup>x<load-on-startup>,x是正整数,越小表示优先级越高 url路径的配置,完全匹配>目录匹配>(.

深入理解作用域链

作用域链是JavaScript中的一个非常重要的概念,想要理解什么是作用域链,就必须知道什么是作用域. 作用域: 1.全局作用域: (1)最外层函数和在最外层函数定义的变量,拥有全局的作用域.js中一切皆对象,函数也是对象,js最外层的对象是window.所以在window下定义的函数和未被这些函数包裹的变量,就拥有全局作用域,这些变量能够在其他任何作用域下使用. (2)所有window对象下的内置属性属于全局变量:如window.document,window.navigator等. (3)没

CPrimer Plus第12章 存储类、链接和内存管理随笔

被static修饰的属于内部链接,不可被外部程序文件所使用一般而言,全局变量(文件作用域变量)具有静态存储期,局部变量(代码块作用域变量)具有自动存储期寄存器变量不能使用地址运算符因为被static修饰的变量不会中途被释放,所以不能用static修饰函数的形参变量的定义放在所有函数定义的外部即创建了一个外部变量,若外部变量在其他文件中定义,则需见extern修饰全局变量只能用常量表达式来赋值:int i;    int j = 2*i;不被允许 ptd = (double *)malloc(n

Js 作用域与作用域链与执行上下文不得不说的故事 ?(? ???ω??? ?)?

最近在研究Js,发现自己对作用域,作用域链,活动对象这几个概念,理解得不是很清楚,所以拜读了@田小计划大神的博客与其他文章,受益匪浅,写这篇随笔算是自己的读书笔记吧~. 作用域 首先明确一个概念,js只有函数作用域(function-based),没有块级作用域,也就是只有函数会有自己的作用域,其他都没有. 接着,作用域分为全局作用域与局部作用域. 全局作用域中的对象可以在代码的任何地方访问,一般来说,下面情况的对象会在全局作用域中: 最外层函数和在最外层函数外面定义的变量 没有通过关键字"va

网管随笔07---【记一次2008R2系统管理测验】

文:铁乐与猫/食梦貘2014年8月13日星期三                 周二[2008r2系统管理]一书班上进行了测验,因为自我感觉良好----课后作业实际操作的都做过了并且感觉理解了.也有每天课前预习划分好着重点.更有每天下午强忍着强烈的睡意愣是把课程一字不落的听完了----感觉整本书都理解了的情况下就算有一些遗忘点,按理也不会超过5题,而50道选择题,一题有两分,拿90分那是妥妥的阿.于是昨晚加上早上临时温习的只有前几章,(而事后证明这种临时温习会有看漏眼的地方,起到的效果是有但不是

初入ES6随笔

初入ES6随笔 var c = a => console.log(a) let a1 = 1; //只在块儿状作用域生效的变量声明 const a2 = 1; //常量声明,值不可改变,快儿状作用域 解构赋值语法 let [a3, b3, c3] = [1, 2, 3]; //数组解构赋值 let [a4 = 0, ...b4] = [1, 2, 3, 4] //数组解构赋值 a4 = 1 b4 = [2,3,4] 允许默认值; let {a5, b5} = {a5: "1",

ES6随笔--声明变量

ES6随笔--声明变量 let命令 所声明的变量只在其所处代码块内有效: {let a = 10}; alert(a); // ReferenceError: a is not defined {let a = 10; alert(a);} //10 在for循环中,for关键字后面跟的设置循环变量语句和后面循环体内部语句是父作用域和子作用域的关系: var arr = []; for (let i = 0; i < 5; i++) { arr[i] = function () { let i

ES6随笔--各数据类型的扩展(3)--函数

ES6随笔--各数据类型的扩展(3)--函数 1. 函数参数的默认值 可以在函数参数中指定默认值,函数内不能再用let或const声明: 使用参数默认值时,不能出现同名参数: 参数默认值惰性求值,每次调用函数会重新计算参数默认值表达式: let x = 99; function foo(p = x + 1) { console.log(p); } foo() // 100 x = 100; foo() // 101 可以与解构赋值默认值结合使用: function ({x, y = 5} = {