1.static修饰方法:修饰局部变量。修饰全局变量。修饰函数
此时a是局部变量,当a离开大括号的时候就被销毁了,下次进来需要重新创建,因此打印出来都是222222
然而,当我们把a用static修饰之后,就变成了静态变量。即使除了大括号也不回被销毁,static修饰局部变量,本质上改变了局部变量的生命周期,改变了他的存储类型。局部变量一般存储在栈区,而堆区一般存放动态分配的变量,静态去存储着静态变量(static修饰的)。
static修饰全局变量
我们知道,全局变量可以再其他源文件中使用,因为全局变量具有外部链接属性,当static修饰全局变量之后全局变量从外部链接属性变成了内部链接属性,这个全局变量只能在自己的源文件(.c)中使用,而其他源文件不能使用,static修饰的函数和全局变量一样,不能在其他源文件中使用。
2.指针初讲
有两个问题:1.内存是怎么编号的2.一个内存单元是多大的空间
我们有32根地址限,通电之后变成1、0,电信号转变成数字信息,即1和0组成的二进制序列,一个内存单元是一个字节,然后进行地址分配。
我们要注意,指针的大小是相同的,32位中,一个指针是4个字节。
3.结构体
结构体的存在可以使得c语言有能力描述复杂类型。
4.循环语句初解
z
在switch'中,一个case后面最好加上break,不然会继续往下面走。
我们要注意while中的break和continue的用法。break会会让while循环终止,而continue会跳过本次循环continue后面的代码。此代码会卡死。
5.getchar()初解
getchar是c语言中较为重要的函数,下列代码的意思是:Getchar获取一个字符放到ch里面,如果读取到的字符不等于eof(说明没出错)(我们知道Getchar读取失败的时候会返回eof)putchar(ch)的意思是把ch里面的数字在读出来。
我们要注意,Getchar和scanf不是从键盘上直接拿信息的,而是在缓冲区里面拿数据,此时scanf把123456拿走放到了password里面,缓冲区里面还有个\n,getchar一进来发现里面有个\n,就直接拿走放到ch里面了,因此导致确认失败。所以必须要把\n拿走清理缓冲区。
如果仅仅是简单的加入一个getchar()来清理缓冲区的话,最然可以正常确认123456这样的密码,仍然有些不妥,因为密码是123456 abcdef的话还是检测不出来。因为此时缓冲区的数据是123456 abcdef\n,而scanf只会拿走123456,而而getchar一次拿不完,因此要放多个getchar直到拿到\n。因此清理缓存最好使用while循环来清理。我通过getchar读到的数据如果不是\n,我就扔了,直至读到\n
6.初识for语句和do while语句
第一个表达式初始化,第二个表达式判断,第三个表达式调整
7.练习题
1.打印从1到n的阶乘
2.计算1!+......+10!注意ret=1非常重要,如果没有这句话,在第二个for循环出来后ret会延用原来的值。
3.二分查找法的讲解。从1,2,3,4,5,6,7,8,9,10中找到7这个数字。
原理:第一步,确定数组的左下标和右下标,left=0;rigrt= 9,mid=(0+9)/2=4,而7的下标是6,
第二步:mid小于6.所以右下标不变,左下标变成mid+1=5。此时mid=(5+9)/2=7,而7的下标是6
第三步:因为mid大于6,所以左下标不变,右下标位mid-1=6,此时mid= (5+6)/2=5,而7的下标是6
第四步:因为mid小于6,所以右下标不变,左下标+1=6,此时mid=(6+6)/2=6找到了要找的值