lesson4
1、static修饰局部变量,全局变量,函数 a(局部变量):static修饰局部变量改变了变量的生命周期,让静态局部变量出了作用域依然存在,直到程序结束,生命周期才结束 。 注:作用域没变,只生命周期改变,局部变量类似转变为全局变量 b(全局变量): (1)全部变量支持跨文件访问:extern int g_value; (2)static修饰全部变量,代表该全部变量,只在本源文件中有效,只能在本源件中访问,不能在其他源文件中进行访问 (3)在本文件中加不加static均可以访问。 c(函数): (1)同情况5和情况6,static修饰函数和修饰全局变量类似。 (2)函数访问支持跨文件的,需要extern声明; (3)static修饰函数,该函数只在本文件内被调用和访问,不能跨文件访问 (4)同一个源文件,用不用static,均可以访问函数。
2、#define宏 (1)只做简单的文本替换 ,对单独使用的变量而言,字符串,变量中出现大的不做替换。 (2)好处:便于代码的维护性 ;方便阅读,能做到见名知意。 (3)但是不建议做简单运算时使用宏,因为在运算时进行文本替换,容易出错。并且宏是在运算前就进行文本替换,不做任何的计算。 (4)要想正确使用宏,给宏中的每个参数都带上括号。 eg:#define DOUBLE(x) ((x)+(x))
3、指针: (1)什么是指针? 指针,就是地址。 指针变量是一个变量,只要是一个变量,需要在内存当中开辟空间,一旦开辟好空间,它这个空间里面就可以存放数据,而地址本身它就是数据,就好比门牌号,它就是数据。 数据可不可以被保存到变量里呢?答案是可以的。 指针变量是一个变量,指针变量里面放的是一个地址吗?是 (2)C语言中why要有指针: 因为数据都是在内存里存的,而内存是一大块内存,为了方便我们后续进行数据处理,内存被划分成一个一个以字节为单位的小格子,这样呢对我们而言,这样的一个一个内存当中的一个小格子,我们可以创一个自己的变量。 实际应用中,我们无非就是想在我们的内存当中。找到一个格子,读取里面的数据,找到这个格子之后,也可能把这个格子里的内容拷给另一个格子,也就是说,在整个数据访问当中,一定涉及到对内存的读操作和写操作。而我们读操作写操作的前提条件是你得先找到你要读什么,或者你要写什么,你得先找到它在哪儿。所以呢,我们必须得有一种方式来标识内存当中的这一个格子。当时啊,我们就有了一个叫做地址的概念,当然仅仅光标识还不够,我们还得通过这种标识来让我们快速的定位到内存当中的某一位置。 指针能够快速定位到内存的位置,解决一个叫做查找效率的问题 具有很强的指向意性,方便快速找到内存中对应的字节位置,以此提高查找效率 (3)初始化和赋值; 定义一个变量,本质是在内存中开辟空间,也就是说a=10,(第一件事情是把变量定义出来,也就是开辟空间。第二件事情,把这个对应的数据放到这个空间里)。这两步并在一块就是初始化的过程。 a=20;a=200;这是一个赋值的过程。a已经不是定义了,因为a已经存在了。 (4)左值,右值 b =a;把a的内容赋给b的空间里; a=20;用的是a变量的空间 /// int* p = &a;开辟空间,p变量里放入一个变量a的地址 int* q = p;p的内容放入q中 总结: a.指针变量也是变量,所以它也必须是有两个属性,一个叫做空间,一个叫做内容。 b.指针变量充当左值,其本质是用这个指针变量的空间属性,32位4字节,64位8字节; 指针变量充当右值,取这个变量的内容的,也就是对应变量的地址。 (5)指针的大小,在32位平台上,四个字节,在64位,八个字节。
|