语句和语句分类
语句
在人的语言中,人们会用一个句子来传递信息。C语言也是如此,而句子在这之中被称为语句。
句号是每个句子的结尾,分号则是语句的结尾。
语句分类
至于语句分类,可分为以下五种:1.空语句 2.表达式语句 3.函数调用语句 4.复合语句 5.控制语句
空语句简单来说就是一个分号就是一条语句,表达式语句暂不做解释,函数调用语句则是在调用函数后面加上分号,复合语句暂不解释,而控制语句是很常用的一种,如条件判断语句(使用if,switch)、循环执行语句(使用do,whlie等等)、转向变量(break等)。
注释
对于每位写代码的人来说,注释是一件非常有用且方便的事。程序员可将自己对某个代码的想法与见解通过注释的方式表达出来供人认识和思考,以至于到就业时研发项目对团队有利。
在代码里做注释,有两种方式
法一:使用/**/
它的用法类似与{}的用法,可将多行代码同时注释。但这一方式有缺陷,不支持嵌套的形式,建议慎用。
法二:使用//
双斜杠//应该是最常用的一种注释方法了。无需手打,可使用Ctl+K+C快捷键的方式来将选中的文字变为注释,若要取消,则可使用ctrl+k+u的方式取消注释。
数据类型和变量
数据类型
C语言的数据类型可分为内置类型和自定义类型。
内置类型
内置类型,顾名思义,是C语言本身具有的,内置类型可分为字符(char)、整型(int)、浮点(float)、布尔(bool)。具体的用法,笔者后续会介绍。
自定义类型
自定义类型是自己创建的类型。可分为数组、结构体、枚举、联合体。这些类型我们会一一见到。
变量
变量,变化的量。与之对应的就是常量,常量则是不变的值。那么变量该如何创建呢?
要通过一个语法形式
变量创建的语法形式:data_type name;
其中 data_type代表的是数据类型,name则是变量名。
举个例子,假设一个变量a,我们要将它赋予一个具体数值,如果是0的话,那么我们可以使用下面这一行代码
int a=0;
很简单,这样我们就赋予了a一个值
具体的数据类型,是我接下来要介绍的
变量的分类
1.全局变量:在大括号外部定义的变量就是全局变量(使用的范围更广,大括号内都可使用)
2.局部变量:在大括号内定义的变量就是全局变量
注意:当局部变量和全局变量同名的时候,局部变量优先使用
内存中存在三个区域:栈区、堆区、静态区
其中
1.局部变量是放在内存的栈区
2.全局变量是放在内存的静态区
3.堆区是用来动态内存管理的
数据类型之内置类型
字符
字符的内置类型,最常用的是char。当我们要定义一个字符时,就需要用到char,如:
char b;
还有signed char和unsigned char的类型,其中signed可省,而char和unsigned char的区别之一就是储存范围的不同,char对应的范围是 -128- 127,unsigned char则是 0--255
整型
整型在前文提了一嘴,是int。但是更具体的分为长短整型,还有更长的整型,可用short (int)、long(int)、long long (int)。括号代表可以省去,当然,这几个整型也有符号的区别,也是用signed和unsigned。然而由于unsigned的取值范围只有正数,那么定义负数时不能使用‘。
浮点型
浮点型是C语言中的小数类型。浮点型有三类数据类型,分别是float、double、long double。float可称为单精度浮点型,double则是双精度浮点型,具体差别,后面还会讲解,
布尔类型
这种类型比较少用到,笔者就不过多介绍了。它是一个关于程序真假的类型。在C语言中,0表示假,而非0则表示真,这一点是需要认识到的。
unsigned和signed
再简单地对这两个类型作个说明
C语言使用signed和unsigned关键字修饰字符型和整型类型
signed关键字表示一个带有正负号,包含负值
unsigned关键字表示该类型不带有正负号,只能表示零和正数
对int类型,signed可省
算数操作符
算术操作符用于C语言中的加减乘除,+、-、*、/分别对应了数学里的加号、减号、乘号、除号。
此外,还有一个%,这与前文所讲的占位符并不相同,在这里代表的是取模,也就是除法运算中的余数(需注意的是,%只能用于整型,不能用浮点型,而负数取模的规则是,结果的正负号由第一个运算数的正负号决定)
赋值操作符
赋值操作符很简单,就是一个=,如果要将一个变量赋予一个具体的值,可以进行以下操作
int a=10;
很明显,此时a这个变量被我们赋予了一个10的数值
除此之外,=还有其他应用
叫复合赋值符
复合赋值符可使用的符号为+=,-=,*=,/=,%=。
我们用几行代码来演示使用方法
int a=0;//先给a赋值为0
a=a+10;//在0的基础上做加法得到a的数为10
printf("%d",a);//打印a的值
int a=0;//先给a赋值为0
a+=10;//在0的基础上做加法得到a的数为10
printf("%d",a);
以上两串代码,如果在编译器里实行的话,得到的都是一样的结果10,其他复合赋值符都是一样的效果,在原变量上加减乘除取模等号后的数,结果都是一样的。
单目操作符
既然有单目操作符,那就有双目操作符。双目操作符就是我们的+,-,*,/,%,是操作符两边都能输入字符的操作符,以此类推,单目操作符则是只能在操作符单边输入字符的符号。
单目操作符有:++,--,+,-(注意:这里的单+和单-代表的是正负号的意思)
而++是自增1的运算,--则是自减1的运算。但是,++和--所放的位置也有区别。
int a=0;
a++;
printf("%d",a);
若在VS中输入这串代码并运行,能得到1。当然,a++改成++a也是一样的效果。
但是,前置和后置的区别,我们只能放在表达式中才能观察,接下来我举个例子。
int a=5;
int b=++a;
printf("%d\n",a);
printf("%d",b);
如果我们打印以上代码,那么我们不难得出,a与b的值都是6
那如果是后置++呢
int a = 5;
int b = a++;
printf("%d\n", a);
printf("%d", b);
在vs中运行这串代码,我们会得到a是6,b是5。
这是为什么呢?
原来,前置和后置的区别就在于运行顺序的不同。
以第一条代码为例,如果是前置++,那么程序会先将a加上1,得到6,接下来b会被赋值6,因此得到的是两个6。
而后置++,在第二条代码里则是b先赋值a原来的数,即5,再接着,a变量才运行++,即输出后为6。
通过以上两个例子,我们可以用两个口诀来简便记忆。
前置++:先++,后使用
后置++:先使用,后++
以此类推,将++符号改为--符号同样适用。
强制类型转换
这个东西用得比较少,我们简单介绍一下。
假设给n赋值一个3.14,这时我们需要用到浮点型的数据类型,如果像这样输入
int n=3.14;
那么程序在运营时会报错,此时我们可以加上一个强制类型转换使程序成功运行,如
int n=(int)3.14;
此时,3.14则被转换成整型,那么最终的打印结果为3