找回密码
 register

QQ登录

只需一步,快速开始

查看: 140|回复: 0

[C语言] 第十七课(03.02~03.03):内存的布局 变量

[复制链接]

[C语言] 第十七课(03.02~03.03):内存的布局 变量

[复制链接]
  • 打卡等级:热心大叔
  • 打卡总天数:91
  • 打卡月天数:14
  • 打卡总奖励:91
  • 最近打卡:2025-01-15 02:59:34
Waylee

主题

0

回帖

1万

积分

仙帝

积分
11890
Waylee 2024-8-7 00:59 | 显示全部楼层 |阅读模式

马上注册,查看网站隐藏内容!!

您需要 登录 才可以下载或查看,没有账号?register

×
变量的存储类别
  • 普通局部变量
  • 静态局部变量
  • 普通全局变量
  • 静态全局变量
内存的分区(了解)
QQ截图20240807171251.jpg
知识点[普通局部变量 普通全局变量 静态局部变量 静态全局变量]
1.普通局部变量
定义形式:在{}里面定义的普通变量 就是普通局部变量
void test01()
{//复合语句
        int num1 = 10;//普通局部变量
}

作用范围:离他最近的{}之间有效
22.jpg
生命周期:离他最近的{}之间有效,离开{}的局部变量 系统自动回收
储存区域:栈区
注意事项:
1.普通局部变量补初始化,内容不确定
2.jpg
2.普通局部变量 同名 就近原则
#include<stdio.h>
void test01()
{
        //局部变量 不初始化 内容不确定
        int data = 100;
        {
                int data = 200;
                printf("A = %d\n",data); //200
        }
        printf("B = %d\n",data);100
}
int main()
{
        test01();
        return 0;
}


2.普通全局变量
定义形式:定义在函数外边的变量,就是普通全局变量
int data;//普通全局变量 在函数外边定义
void test02()
{
}

作用范围:
a.当前源文件都有效
#include<stdio.h>
extern int data;//声明一下 不要赋值
void test01()
{
        printf("test01 = %d\n",data);//100
}
int data = 100;//普通全局变量 在函数外边定义
void test02()
{
        printf("test02 = %d\n",data);//100
}
int main(int argc,char *argv[])
{
        printf("main = %d\n",data);//100
        test01();
        test02();
        return 0;
}

b.其他源文件使用全局变量时,必须加extern声明
//extern 本质作用:告诉编译器 变量/函数 来自其他源文件 请通过编译
3.jpg
生命周期:整个进程都有效(程序结束的时候 全局变量 才被释放)
存储区域:全局区
注意事项:
a.全局变量不初始化 内容为0.
b.如果全局变量 要在其他源文件中使用 必须在所使用源文件中加extern声明
c.如果全局变量 和 局部变量 同名 在局部{}中优先使用局部变量
3.静态局部变量
定义形式:在{}中定义 前面 必须加static 叫 静态局部变量
void test01()
{        
        static int num;//静态局部变量
        return;
}

作用范围:离他最近的{}之间有效
void test01()
{        
        {
                static int num;//静态局部变量
        }
        //说明 静态局部变量 只在离他最近的{}有效
        printf("%d\n",num);//error C2065: 'num' : undeclared identifier
        return;
}

生命周期:整个进程,(程序结束时候 静态局部变量 才被释放)
--------------------案例--------------------
#include<stdio.h>
void fun1()
{
        //静态局部变量 只能被初始化一次
        static int num = 10;//普通的局部变量
        num++;
        printf("num = %d\n",num);
        return;
}
int main(int argc,char *argv[])
{
        fun1();//11
        fun1();//12
        fun1();//13
        fun1();//14
        return 0;
}

存储区域:全局区
注意事项:
a.静态局部变量 不初始化 内容为0 (全局区)
b.只能被定义一次
4.静态全局变量
定义形式:在函数外边定义 同时加static 这样的变量 就是 静态全局变量
static int data = 0;静态全局变量


作用范围:当前源文件有效 不能在其他源文件中使用
生命周期:整个进程  程序结束 静态全局变量才被释放
存储区域:全局区
注意事项:
1.静态全局变量 不初始化 内容为0
2.静态全局变量 只在当前源文件 有效
全局函数(普通函数)和静态函数(局部函数)
1.全局函数:普通函数
void my_static_fun(void)


特点:
  • 可以在其他源文件使用
  • 其他原文 可以使用 全局函数 必须加extern 声明

2.静态函数(局部函数)
static void my_static_fun(void)

特点:
只能在当前源文件使用 不能在其他源文件使用
注意:如果想在其他源文件调用静态函数,需要将静态函数封装在全局函数中.同时全局函数  和 静态函数 必须是同一个源文件.


案例:
1.jpg
7*18*20 = 2520


您需要登录后才可以回帖 登录 | register

本版积分规则

雪舞知识库 | 浙ICP备15015590号-1 | 萌ICP备20232229号|浙公网安备33048102000118号 |天天打卡

GMT+8, 2025-1-15 13:59 , Processed in 0.109014 second(s), 8 queries , Redis On.

Powered by XueWu Licensed

Copyright © Tencent Cloud.

快速回复 返回顶部 返回列表