C语言中易被忽略或者混淆的东西

来源:互联网 发布:淘宝中文网站排名 编辑:程序博客网 时间:2024/05/16 07:17

 大学一年级开始学C 语言,但许多知识还不是很清楚,有些则停留在概念阶段,实际操作时常常搞的乱七八糟。为了更深入理解C语言,把一些概念和知识记录下来,以方便查阅。

  1. C 语言中最常出现的就是变量和函数,而且有不同的类型,变量有auto,static,register,extern,函数有staticextern

    对于变量:

    auto:一般我们在函数内部申明的没有特殊关键词的变量都是auto,这种变量在使用完后会自动释放存储空间

    static:用static申明的变量会在静态存储区分配空间,而且会一直保存到程序结束,

                  如果变量是函数内部的,则该变量在函数退出后不会释放,下次调用仍然是上次的值,但该变量只能由该函数使用;

                  如果变量是函数外部的变量(全局变量),则该变量只能在申明这个变量的文件中使用,而对于程序的其他源文件不能使用该变量

    register:此种变量只能是局部变量,将变量的值直接放到了寄存器中,速度快,但是不能分配太多,cpu的寄存器个数有限

    extern:全局变量,申明在函数外部,且这个程序的所以文件都可以使用

    对于函数:

    static:与变量类似,将函数申明为static则该函数只能在定义函数的文件中使用,其他文件不能使用

    extern:全局函数,程序的所有文件都可以调用

    编程时要根据实际使用情况定义变量的类型,提高程序变量的使用效率和安全性。

  2. 堆和栈

             堆和栈是内存中的两块不同的区域,他们都位于内存的动态存储区,一般栈区位于动态存储区的高地址处,堆则位于动态存储区的低地址处。栈存东西是由高到低存,堆则是由低到高分配。虽然这样描述不太严谨,但可以给人一个直观的认识。栈是系统自动分配的,比较小;堆是程序员来分配的,可分配的空间也比较大。栈区保存的是调用函数或者中断发生时的程序的上下文,包括下一条指令的地址,局部变量等;堆区的内容是程序员赋予的。
             
0 0