C语言里,哪些变量是存放在堆里?哪些是存放在栈里
堆区:全局变量,静态变量,malloc函数。
栈区:函数的参数值,局部变量。1、栈区(stack)— 编译器自动分配释放 ,例如存放函数的参数值,局部变量的值等。
2、堆区(heap) — 由程序来分配释放, 若程序中不释放,那么在程序结束时可能由系统进行回收 ,例如全局变量,静态变量,malloc函数。
一切局部变量都在堆栈里保存,函数调用也在堆栈里保存返回地址。
指针如果也是局部变量,也在堆栈里分配的。还有程序运算时候也会用到堆栈。全局变量和用内存分配函数分配的空间,则不是在堆栈里分配。
在程序的专门数据空间分配
什么是c语言
首先,先引用两个百科式的定义,让你有个基础了解。
1、C 语言是一种通用的、面向过程式的计算机程序设计语言。1972 年,为了移植与开发 UNIX 操作系统,丹尼斯·里奇在贝尔电话实验室设计开发了 C 语言。
2、C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括一些类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。
其次,更为专业化的表述,以及百科一大堆的说明性文字,我就不在复制了,尽量捡干货说说。
1、一般C语言是作为初学者进行,普及性、入门教育的,一般大学的计算机语言都是C语言为主,不过现今各个大学也开设java、python等语言教学。
2、C语言是面向过程的,而目前市面上的开发一般都是java、C#、python……,这是因为面向对象的开发更容易让开发者,有一个清晰的轮廓。许多开发者都是由C入门,再转向各自的领域。
这里可能还需要向你普及以下知识:
2.1、面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
2.2、面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
3、虽然前两点让C看起来好像是小儿科,要淘汰的语言,但实际上,他的应用领域非常广泛,并且由于他更接近底层,真正做C开发的都是大牛。比如很多的驱动程序都是使用C、C++进行编写,如果对速度要求苛刻的还会用汇编。
4、在学会C语言后,你可以更加容易的去理解其他高级语言。
5、C语言的应用领域广泛,如单片机、嵌入式、算法、数据库、操作系统、
6、好处学一门开发语言,能够锻炼你的逻辑能力、思维能力、能够帮助你将复杂问题,简单化,
希望以上回答能够让你更加感性的了解C语言。
C语言中有哪些存储类型
c语言中的存储类型有auto, extern, register, static 这四种,存储类型说明了该变量要在进程的哪一个段中分配内存空间,可以为变量分配内存存储空间的有数据区、BBS区、栈区、堆区。
1. auto存储类型
auto只能用来标识局部变量的存储类型,对于局部变量,auto是默认的存储类型,不需要显示的指定。因此,auto标识的变量存储在栈区中。
2. extern存储类型
extern用来声明在当前文件中引用在当前项目中的其它文件中定义的全局变量。如果全局变量未被初始化,那么将被存在BBS区中,且在编译时,自动将其值赋值为0,如果已经被初始化,那么就被存在数据区中。全局变量,不管是否被初始化,其生命周期都是整个程序运行过程中,为了节省内存空间,在当前文件中使用extern来声明其它文件中定义的全局变量时,就不会再为其分配内存空间。
3. register存储类型
声明为register的变量在由内存调入到CPU寄存器后,则常驻在CPU的寄存器中,因此访问register变量将在很大程度上提高效率,因为省去了变量由内存调入到寄存器过程中的好几个指令周期。
4. static存储类型
被声明为静态类型的变量,无论是全局的还是局部的,都存储在数据区中,其生命周期为整个程序,如果是静态局部变量,其作用域为一对{}内,如果是静态全局变量,其作用域为当前文件。静态变量如果没有被初始化,则自动初始化为0。静态变量只能够初始化一次。
还没有评论,来说两句吧...