函数——变量的存储类别

1 内存的分区

 1内存:物理内存(实实在在的存储设备),虚拟内存(操作系统虚拟出来的内存);

                 在写应用程序时,我们看到的都是虚拟地址;

2虚拟内存分区

  :在动态申请内存时,在堆里开辟内存

  :主要存放局部变量

  静态全局区:a-未初始化的静态全局区

                                 静态变量(定义变量的时候,前面加一个static修饰),或全局变量,没有初始化的,存在此区                    

                            b-初始化的静态全局区

                        全局变量,静态变量,赋过初值的存放在此区

 代码区:存放程序代码

 文字常量区:存放常量的

2普通全局变量

 概念:在函数外面定义的变量           

例 int num=100;//num就是一个全局变量,不加static就是普通全局变量,

              int main()

              {

                    return 0;

             }

作用范围:程序的所有地方;不过在别的地方用的时候,用之前需要声明(方法:extern int num;

                      注意声明的时候,不要赋值

生命周期:程序运行的整个过程

注意:定义普通全局变量的时候,如果不赋初值,它的值默认为零;

3静态全局变量  static

概念:定义全局变量,前面用static修饰

作用范围:static限定了静态全局变量。作用范围只能是在它定义的.c(源文件)中有效。

生命周期:程序运行的整个过程

注意:定义静态全局变量的时候,如果不赋初值,它的值默认为零;

4普通局部变量

概念:在函数内部定义的。或者复合语句中定义的变量;

         int main()

          {

              int num;//普通局部变量

                           {

                                    int a;//普通局部变量

                                }

          }

作用范围:在函数中定义的,在他的函数中有效;在复合语句中定义的,在他的复合语句中有效;9

生命周期:在函数调用之前,局部变量不占用空间,调用函数的时候,才为局部变量开辟空间,函数结束了局部变量就释放了。

#include<stdio.h>
void fun(void);

int main

{
    int num = 100;
    {
        int a = 20;
    }
    printf("a=%d\n", a);
    return 0;
}

//像这样写就会报错,因为因为定义a 是在第一个花括号里面,她并不在第二个花括号里起作用

   #include<stdio.h>
void fun(void);
int main()
{
    int num = 100;
    {
        int a = 20;
    }
    
    return 0;
}
void fun(void) {
    printf("num=%d\n", num);//这样也会报错,因为num在fun函数里没有定义;   

5静态局部变量

概念:定义局部变量时,前面加static修饰作用范围:爱他定义的函数或者复合语句中有效

生命周期:第一次调用函数的时候,开辟空间复制,函数结束后,不释放;

                 以后再调用的时候,就不再为其开辟空间,也不赋初值;用的是以前的变量;

          

#include<stdio.h>
void fun(void)
{
	static int num = 3;
	num++;
	printf("%d", num);
}
int main()
{
	fun();
	fun();
	fun();
	return 0;
}

 以下为输出结果,由此可见,第一次调用函数的时候,开辟空间复制,函数结束后,不释放;

 以后再调用的时候,就不再为其开辟空间,也不赋初值;用的是以前的变量

456
C:\Users\86152\source\repos\实验四\x64\Debug\实验四.exe (进程 48340)已退出,代码为 0。
按任意键关闭此窗口. . .


扩展:变量存储类别

  在同一作用范围内,不约需变量重名;

作用范围不停的可以忠明

局部范围内,重名的全局变量不起作用(就近原则)。 

6外部函数

咱们定义的的普通函数都是外部函数,积函数可以在程序的任何一个文件中调用。

7内部函数

概念:在定义函数的时候,返回值类型前面加static修饰,

static限定了函数的之作用范围,在定义的.c中有效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值