在C语言中,函数意味着功能模块。一个典型的C语言程序,就是由一个个的功能模块拼接而成的整体。也因为如此,C语言被称为模块化语言。
对于函数的使用者,可以简单的将函数理解为黑箱子,使用者只管按照规定给黑箱一些输入,就会得到一些输出,而不必要理会黑箱子里面的运行细节,只需要知道黑箱子的规则即可。
对于函数的设计者,最重要的工作是封装,封装意味着对外提供服务并隐藏细节。对于一个封装良好的函数而言,其对外提供服务的接口应当是简洁的,内部功能应当是明确的。函数封装是将所设计的函数进行打包放进一个独立的.c文件中,如果想使用,主函数直接调用即可。
函数的调用是在主函数中输入关键字,进入被调入函数中进行运行,运行结束后再返回主函数。
内存布局:
在c语言程序中,想要正常运行需要内存资源来存放变量常量代码段等等,其中内存分为虚拟内存和物理内存,虚拟内存的分布图如下:
栈的特点:
栈的大小只有8M,不能存放太大的数据,否则会导致溢出
栈的内存由系统分配,我们无法干预
栈的生命周期短,在该函数运行完就被系统自动清空
堆的特点:
堆的内存大小和物理内存相关,比栈的内存大的多
栈的内存可以由使用者自由分配,自由释放
栈的生命周期长,除非使用者主动释放,否则直到程序结束才会释放
静态数据:
若定义时未初始化,则系统会将所有的静态数据自动初始化为0
静态数据初始化语句,只会执行一遍。
静态数据从程序开始运行时便已存在,直到程序退出时才释放。
static:
static修饰局部变量:使之由栈内存临时数据,变为静态数据
static修饰全局变量:使之由个文件可见的静态数据,变成为本文件可见的静态数据
static修饰的函数:使之由各文件可见的函数,变成为本文件可见的静态函数。
结构体:
结构体是将不同的数据类型组合起来,形成自定义的变量类型。结构体和其他变量一样需要初始化、赋值等,但是也有一些不同之处。
初始化:
1、普通初始化
2、指定成员初始化
普通初始化需要严格按照顺序进行初始化,而指定成员初始化可以对顺序进行改变,还可以不全部初始化,只初始化自己需要的部分。
结构体成员引用
我们可以把结构体看作一个集合,里面的每一个成员都是一个子集,他们都可以单独引用,使用成员引用符就可以对他们单独引用