程序代码篇---C&Python作用域


文章目录

  • 前言
  • 第一部分:堆&栈
    • 1.堆区&栈区的区别
    • 2.堆存储&栈存储的优点
    • 3.全局/静态存储区
    • 4.代码区
  • 第二部分:C语言的作用域
    • 1.作用域分类
      • (1).在所有函数之外的全局变量
      • (2).在函数内或者块内的局部变量
      • (3).作为函数参数的形式参数
    • 2.数据初始化
  • 第三部分:Python作用域
    • 1.作用域的分类
    • 2.不同作用域的特点
  • 总结


前言

本章首先介绍了内存中的栈&堆,进而介绍了C语言&Python的作用域


第一部分:堆&栈

1.堆区&栈区的区别

堆栈中存储着不同生命周期的数据

栈:存储函数调用过程中的局部变量,函数调用的返回地址等
函数执行时,相关数据压入栈,执行完毕后,相关数据弹出栈,局部变量失效,内存释放。

堆:存储生命周期不定的数据,动态分配的内存等
随时申请开辟相关内存,不自动释放内存,需要自主释放内存
通过malloc、calloc等函数申请,通过free函数来手动释放内存

2.堆存储&栈存储的优点

栈:
后进先出,内存分配和释放快,程序运行效率高,具有数据自动管理机制,避免一些内存问题(如内存泄漏等),适合存储函数内部的临时数据

堆:
随时开辟内存、随地释放内存,灵活性高,适合存储不确定存储时间、存储大小的数据(长期、短期,大、小等)

3.全局/静态存储区

全局/静态存储区:
存储全局变量和静态变量,在程序执行前就初始化(可以手动初始化或者系统自动初始化)并分配空间,这些变量在整个程序执行期间都存在

4.代码区

代码区
存储程序编译后的机器指令(二进制代码)

第二部分:C语言的作用域

1.作用域分类

全局作用域:全局变量

局部作用域:局部变量、形式参数

块级作用域:块级变量

(1).在所有函数之外的全局变量

特点:
全局变量:通常定义在程序的顶部、所有函数的外部

全局变量:在整个程序的整个生命周期内都是有效的,在任何函数、块区域(即{}内部)内都可以访问

(2).在函数内或者块内的局部变量

局部变量:在某个函数内部或者代码块(即{}内部)内部声明的变量

局部变量:只能在该函数或者代码块(即{}内部)内部使用,不可被外部代码使用

注意:局部变量和全局变量可以重名,但是在函数或者代码块(即{}内部)内,如果局部变量和全局变量名字相同,以局部变量优先(即使用局部变量,不使用全局变量)

(3).作为函数参数的形式参数

形式参数:即函数参数,性质类似于局部变量,只能在函数内部使用

2.数据初始化

全局变量声明时,系统会对其进行相应的初始化

int —>0
float —>0
double—>0
char—>‘0’
*p—>NULL

局部变量声明时,系统不会对其进行相应的初始化,必须手动赋值

第三部分:Python作用域

1.作用域的分类

全局作用域:在程序模块中的定义的变量

局部作用域:在类、函数中定义的变量

内置作用域:Python中内置的变量、函数,比如print()

2.不同作用域的特点

全局作用域:
全局作用域中的变量,可以被整个程序模块访问,但是不能随意进行修改
局部作用域:
局部作用域中的变量,只能在函数或者模块内部进行被访问
内置作用域:
Python中内置的变量、函数,在程序的任何地方都可以直接访问,无需导入
注意:
可以在局部作用域中,通过使用global关键字声明全局变量进而修改全局变量

局部作用域可以再次嵌套局部作用域(例如在局部作用域中,在嵌套个函数、代码块),类似全局作用域嵌套局部作用域

在嵌套作用域中,可以使用nonlocal关键字进而修改嵌套函数外部的变量

if{}、while{}等代码块一级局部作用域


总结

以上就是本次要讲的内容,本文仅仅简单介绍了各个程序存储区、作用域的作用。

你可能感兴趣的:(程序代码篇,c语言,python)