您的位置:首页 > 编程语言 > C语言/C++

C语言进阶_笔记 第一章 必须理清的核心概念

2015-02-26 22:36 459 查看
    写了两年C代码,想着自己还是可以的,不过这两天拜读了牟老大的《C语言进阶_重点、难点与疑点解析》,发现有很多地方还是要巩固,故此在这里做下笔记,算作读书心得和备忘吧!

    第一章 必须理清的核心概念

    1.堆栈。

     下面这个C语言题目,要求在不传递参数的情况下,在print()函数中打印main()函数中arr数组中的各个元素。

 


    这个C语言题目,较深入的分析的一些问题,比如函数调用时的压栈操作,压栈时CPU寄存器工作步骤等。有意思的是,利用堆栈来定位数据的技巧与病毒编写的“重定位”技术很相似。答案如下,具体可以参考这本书的相关章节。

 


    2.弄清各种变量及概念。

     #1.全局变量,也称外部变量,在函数体外定义,不是哪一个函数所特有的。全局变量又可以分为外部全局变量和静态全局变量,它们之间的最大区别在于,使用static存储类别的全局变量只能在被定义的源程序文件中使用,而使用extern存储类别的全局变量不仅可以在被定义的源程序文件中使用,还可以被其他源文件中的函数引用。

     #2.静态存储区和动态存储区的区别及意义。

     #3.自动(auto):非静态变量的局部变量即为自动变量,其类型说明符为auto, 在C语言中,将函数内没有存储类别说明的变量均视为自动变量,即自动变量可以省去说明符auto。

     #4.寄存器(rgister).

     #5.静态(static)

     关于静态变量,值得注意的一点是,它的生存期是从程序开始运行到程序运行结束。静态变量不属于动态存储,是静态存储。

静态局部变量的生存期虽然是从程序开始运行到程序运行结束,但是它的作用域并不会因此而改变,而且仍然与其作为自动变量的作用域相同。静态全局变量的特点是,它只能在被定义的源程序文件中使用,即它只能被本源程序文件的函数调用,而不能被其他的源程序文件中的函数调用。静态局部变量和静态全局变量的定义形式都是在数据类型前加上一个静态存储定义符static。但是值得注意的是,两者的初始化方式不同,静态局部变量在它所在的函数被执行时初始化,之后再次执行该函数时,该静态局部变量不再进行初始化,其中保留的是上一次的运行结果;而静态全局变量的初始化是在执行main()函数之前完成的,其静态全局变量的当前值由最近一次对它的赋值操作决定。

    #6.外部(extern).

    #7.作用域.

    3.指针数组/数组指针和指针函数和函数指针。

    4.传值/传址,递归/嵌套。

    5.结构体、共用体、枚举和位域。

    结构体、共用体和枚举很多方面都是相似的,她们的差异也很好理解。这里重点说明几点,如下。

    #1.共用体的典型应用及有点体现。如下是结构体和共用体的结合,共用体就很好的适应了需求节约了空间。



    #2.三者中枚举所独具的特点。



    #3.位域。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言进阶 变量