五、变量
变量在我们生活中也是非常的常见,例如:年龄,体重,薪资等等。
1.定义变量的方法
其实在之前你们已经会定义了,只是不知道而已,定义变量很简单:int a=100;char ch=‘w';
float weight=65.5f;很简单。其中65.5后面加f是因为编译器默认一个小数为double类型,而我们定义的是float类型,所以后面加一个f就不会默认为double类型了。
2.变量的命名
变量的命名很灵活,基本上是可以达到我们的随意。
有几个限制条件:(1)只能由数字、字母、下划线(_)组成 。
(2)长度不能超过63个字符
(3)变量名中区分大小写。
(4)变量名不可以使用关键字。(例如int short之类的,后面会说什么是关键字)(最好有意义一些,例如定义体重用int weight=xx,而不是int a=xx,如果变量多了就不记得什么对应着什么了)
3.变量的分类
(1)局部变量:就是定义在main{ }内部的变量 (2)全局变量:就是定义在main{ }外的变量。
#include <stdio.h>
int a = 10; //全局变量
int main()
{
int a = 200; //局部变量
printf("%d", a);
return 0;
}
当全局变量和局部变量同时定义了一个相同变量时,会发生什么呢?
如图,当全局变量和局部变量同名时局部变量优先。
注意:局部变量不可以被多次初始化,即int a=10;int a=20;如想改变a的值,则a=20;即可。
下面我给大家来一段变量的使用例子吧
计算器:
#include <stdio.h>
int main()
{
int a = 0; //a和b为要想加的两个数
int b = 0;
int num = 0; //num为相加后的和
printf("请输入两个数,两个数之间用空格隔开\n");
scanf("%d %d", &a, &b); //scanf用于输入a和b的值
num = a + b; //把a和b相加的值赋给num
printf("%d", num); //打印相加后的值
return 0;
}
其中scanf函数为库函数,是用于输入数值的函数,在这里就给a和b输入了值。头文件为#include <stdio.h>
4.函数的作用域和生命周期
作用域:
作用域是程序设局的一个概念,通常来说,一段代码中所用到的名字并不是总是有效的,而限定这个名字的可用性的代码范围即为作用域。
如图a的作用域就是这个方块内部。
而如果像下图一下定义,则会出错,因为printf打印的b已经不再b的作用域内,printf找不到b。
(1)局部变量的作用域是在变量所在的局部代码块内。
而全局变量就很厉害
在一个工程,不同的文件中也可以相互使用,只需要用extern声名一下即可(2)全局变量的作用域是整个工程。(一个工程可以包含很多个文件,全局变量可以跨文件使用,只需要适当的声名即可)
生命周期:
变量的生命周期指的是变量创建道变量销毁之间的一个时间段。
(1)局部变量的生命周期:进入作用域开始,出作用域结束。
(2)全局变量的生命周期是整个工程的生命周期。
六、字符串
其实,我们刚开始打印的“hello world!!!”就是一个字符串。
这种 由双引号引起的一串字符成为字符串字面值,简称字符串。
字符串的结束标准是一个\0的转义字符,在计算字符长度时\0也时结束标志,同时不算做字符串的长度。字符串使用数组来定义的。
如图下面的代码为什么会出现这种效果呢?
arr1时字符串,字符串会自动在末尾加上一个\0,而arr2时字符数组,没有\0,所以在打印时printf要找到一个\0才可以结束打印,所以arr1打印出了VS,arr2打印时,要在内存里找到一个\0才停止,所以打出了一堆未知的东西。arr3我们人为添加了\0,所以打印出VS后停止打印。
strlen是一个计算字符串大小的函数,属于库函数,头文件<string.h>
在strlen计算是也是要找到一个\0才停止计算,所以arr1和arr3都是2个字符,而arr2是一个随机的数字大小。
图中红色的方块可以看作是计算机内部的内存空间。
注意:只有字符串由结束标志。
这个过程可以看出\0就发挥了很大的作用。
七、转义字符
当我们要打印一个\n时,结果打印出来的时空空的换行。
这时候就需要转义字符的帮助。
下表就是一些转义字符:
(1)\'
printf("%c\n", ''');
printf("%c\n", '\'');
第一种会出错,而第二种则会打印出一个单引号。
双引号和斜杠的打印也一样。
(2)\?
在早期的编译器里有三字母词的说法,??)会转变为 】,所以打印多个?时,这样书写:
printf("abc\?\?"); //则会打印出abc??
(3)\a会出现蜂鸣,就是电脑响一下。
(4)\b退格符
printf("ab\bcde"); //则会打印出acde
(5)\ooo
ooo表示1~3个八进制数字。如\130
(6)\xoo
oo表示1~2个十六进制的数字。如\x32
其他的不太重要就不一个一个介绍了,如果想要详细了解,可以私信我哦。
下面给大家出一道题:
#include <stdio.h>
#include <string.h>
int main()
{
printf("%d", strlen("c:\test\628\test.c"));
return 0;
}
你们觉得打印的时多少呢?
八、注释
代码中有不需要的代码可以直接删除掉,也可以注释掉,代码中有一些难理解的地方,可以加如一些文字注释。
(1)C语言中的注释:/*xxxxxxxxxxxx*/ 缺陷,不能嵌套使用
#include <string.h>
int main()
{
/* printf("%d", strlen("c:\test\628\test.c"));
/* printf("%d", strlen("c:\test\628\test.c"));
printf("%d", strlen("c:\test\628\test.c")); */
printf("%d", strlen("c:\test\628\test.c")); */
return 0;
}
如图看出,最后一行的printf没有被注释掉
/*只会去找离他最近的一个*/,所以说不嫩嵌套使用。
(2)C++中的注释://xxxxxxxxxx
可以注释一行或多行。用起来方便。
好了,今天的学习就到这里,明天我们继续学习循环,选择语句,数组,和一些操作符。