scanf函数、printf函数都是库函数,都可以直接使用。
库函数——C语言的编译器所提供的现成的函数,可以直接使用。
scanf函数的作用是输入数据,数据从键盘读取到内存去,printf函数的作用是将数据从内存打印到屏幕上。
scanf函数
输入的格式表示你从键盘输入的东西的格式,这里指的是以十进制的格式打印,如果你输入的格式和程序所打印的格式不同,那就会打印出错。这里要记住,%c适用于字符,%d适用于整型,%s适用于字符串,%f适用于float类型,%lf适用于double类型,%p适用于地址的打印。当然你也可以同时使用多个%d之类的,当然后面的地址就需要一一对应好。
变量的作用域和生命周期
作用域
作用域是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的而限定这个名字的可能性的代码范围就是这个名字的作用域。
1.局部变量的作用域是变量所在的局部范围。
2.全局变量的作用域是整个工程。
对比上面两张图,大家可以明确的感受到变量使用的方法,以及作用域的概念,第二张图大家得以看到,a变量处于一对括号内部,而大括号外部的printf函数想要输出a,但是报错了,可见a的作用域仅限于包含a大括号内,外部的函数是用不了的,如果你执行程序,就会显示a未定义。
来比较一下这张图和第一张图,看看a的作用域范围,如果你的答案是main函数范围和包含a,printf函数的大括号范围,那么,恭喜你,你已经明白了局部变量的概念。
全局变量,顾名思义就是整个程序都可以使用的变量,像上图的a变量,我们定义了了一个test函数,并且在main函数中调用了test函数,都可以使用a变量,其实道理和局部变量都差不了多少。
其实当语法合适的情况下 ,我们还可以再创建一个源文件,并且在这个源文件里定义变量并在原来的源文件里使用。
但是记住,当你想要使用这个外部变量时,你必须声明变量,
使用extern声明外部变量,这样就可以使用了。
生命周期
作用域限制的是可以在哪里使用,而生命周期限制的是什么时候可以使用。
1.局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
2.全局变量的生命周期是:整个程序的生命周期。
来看看这张图,从main函数开始下面的第二个大括号开始,变量a,b,c生命周期开始,当到第三个大括号出去之后,就结束了,它们的生命周期仅限于此。
可能你们能听懂但是还不够了解生命周期,那我们来说说变量创建,变量创建的本质就是在内存中开辟一块空间,用来存放数据,当它创建后,在其生命周期结束之后,就会销毁,这里的销毁并不是直接把这个变量给删了,没了,而是把它所占用的空间还给了操作系统。所以当变量出了其的作用域 ,操作系统就会为了节省空间,就会销毁变量,这样,变量的生命周期就结束了。
全局变量的作用域是整个程序,因此,整个程序的任何一个位置都有可能使用它,所以它的生命周期就是程序的生命周期。
常量
字面常量就是直接写出来的常量,就像是3、3.14之类的。
const常变量,这指的是一个变量加了const修饰,这里来介绍一下const,由const修饰的变量不能改变。
但是呢,这里的a是具有常属性的,不能被改变,但其实本质还是变量
这里来一个数组来举例,虽然我们使用了const来修饰变量来使a有了常属性,但是还是没办法用于数组,可见其本质还是变量。
#define可以定义标识符
#define可以定义标识符,那么他也可以定义标识符为常量。
还是来用数组举例,这里就可以成功使用,当然#define也可以用来定义其他的东西,比如说用定义一个字符。
枚举常量
枚举的意思其实就是一一列举的意思,为什么要有枚举呢,因为我们生活中有的东西是可以一一列举的,比如性别,血型,三原色。
这时候C语言就引进了枚举类型,叫enum,他可以让我们具体的定义一种类型。
格式:enum 名字{ 枚举类型的取值 };
enum sex{
male,female,secret
};
记住你可以更改枚举常量的初始值,但是你改完之后,在其他地方是无法更改的。