其他分享
首页 > 其他分享> > 中国大学MOOC-翁恺C语言-学习笔记(三)

中国大学MOOC-翁恺C语言-学习笔记(三)

作者:互联网

第六部分(结构):

  1. 全局变量:定义在函数外面的变量,具有全局的生存期和作用域,在任何函数内部都可使用。
    (1)没有做初始化的全局变量会得到0值,指针会得到NULL值;
    (2)如果函数内部存在与全局变量同名的变量,则全局变量会被隐藏;
    (3)全局变量的初始化发生在main函数之前。

  2. 本地变量:定义在函数内部的变量和函数参数都属于本地变量。本地变量的生存期和作用域都是大括号

  3. 静态本地变量:在定义本地变量时加上 static 修饰符就可成为静态本地变量。
    (1)在函数离开时,静态本地变量会继续存在并保持其值;
    (2)静态本地变量实际是特殊的全局变量。静态本地变量和全局变量位于相同的内存空间。
    (3)具有全局生存期,函数内的局部作用域

注:应尽量避免使用全局变量,且不要用全局变量在函数之间传递参数和结果。

  1. #:指出编译预处理指令

除常见的编译预处理指令外,还有其它编译预处理指令如:条件编译、error 等。

  1. #define:用来定义一个宏。宏有:有值的宏、没值的宏、预定义的宏、像函数的宏。
const double PI = 3.14159;
#define PI 3.14159

定义带参数的宏时需遵循的原则:
(1)参数出现的每个地方都要有括号;
(2)整个值要有括号;
(3)一切都要有括号。

带参数的宏在大型程序的代码中使用非常普遍,它虽牺牲了空间,但赢取了效率。

没有值的宏是用于条件编译的,后面有其他的编译预处理指令来检查这个宏是否已经被定义过了。

#define _DEBUG

枚举是一种用户定义的数据类型,它用关键字 enum 以如下语法来声明:
(1)enum 枚举类型名字 {名字0,……名字n}
(2)声明枚举量的时候可以指定值,如:

enum COLOR { RED=1, YELLOW, GREEN=5, NumCOLORS };

(3)虽然枚举类型可以当作类型使用,但实际上很少用(不好用)。
(4)如果有意义上排比的名字,用枚举比const int 方便;
(5)枚举比宏好用,因为枚举有int类型。

#include的误区:
在这里插入图片描述
#include 有两种形式来指出要插入的文件:< > 和 “ ”
(1)“ ” 要求编译器首先在目前目录(源文件所在的目录)寻找这个文件。如果没有,再到编译器指定的目录去寻找这个文件。
(2)< > 要求编译器只在指定的目录中寻找。

位段:用于比较底层的直接操作硬件的操作。

部分宏会被inline函数替代:是函数,没有函数调用时的额外开销

0地址:
内存中有0地址,但 0 地址通常是不能随便碰的地址。故,指针不应该具有0值。
可以用0地址来表示特殊的事情。
返回的指针是无效的。
指针没有被真正初始化。(先初始化为零)
NULL是一个预定定义的符号,表示0地址。

环境变量和编译器命令行参数可以指定寻找头文件的目录。

extern int aAll; 变量的声明
int aAll; 变量的定义

声明是不产生代码的东西
头文件里只能放声明

文件输入输出
FILE *fp=fopen(“file”,“r”);

在这里插入图片描述

按位运算:
按位与:&

两种应用;
(1)让某一位或某些位为0:x & 0xFE
(2)取一个数中的一段:x & 0xFF

按位与:|
(1)让某一位或某些位为1:x | 0x01
(2)把两个数拼起来:0x00FF | 0xFF00

按位取反:~

按位异或:^
(1)对一个变量用同一个值异或两次,等于什么也没做。xyy 得到x

左移:<<
x<<=1 等价于x*=2
x<<=n 等价于x*=n

右移:>>
对于unsigned类型,左边填入0
对于signed类型,左边填入原来的最高位(保持符号不变)
x<<=1 等价于x/=2
x<<=n 等价于x/=n

链表:

标签:MOOC,全局变量,变量,定义,C语言,枚举,本地,翁恺,函数
来源: https://blog.csdn.net/weixin_43915593/article/details/114889940