目录
一、变量
1、变量的创建
我们之前提到的数据类型的作用就是来创建变量。C语言中变化的值称为变量,不变的值称为常量。下面是变量创建的语法形式:
data_type name;
| |
数据类型 变量名
例如:
int a ----整型变量
char b ----字符变量
double c ----双精度浮点型变量
在创建变量时赋给该变量一个初始值,这个过程叫做变量的初始化。
int a = 10;
char b = 'b';
double c = 3.0;
2、变量的分类
变量分为全局变量和局部变量。
全局变量:在大括号外部定义的变量叫做全局变量。全局变量的适用范围是整个工程。
局部变量:在大括号内部定义的变量叫做局部变量。局部变量的适用范围比较局限,只能在自己 所在的局部范围内使用。
#include <stdio.h>
int a = 2003;//全局变量
int main()
{
int b = 2024;//局部变量
printf("%d\n",a);
printf("%d\n",b);
return 0;
}
如果局部变量与全局变量名称一致,局部变量优先被使用。
#include <stdio.h>
int a = 2020;
int main()
{
int a = 2024;
printf("%d\n")
return 0;
}

由上面的代码及运行结果可以验证,当全局变量与局部变量同名时,局部变量优先使用。
3、全局变量与局部变量在内存中的存储
在学习C语言时,内存存储主要有三个区域:栈区、堆区、静态区。其中局部变量存储在内存的栈区;全局变量存储在内存的静态区;而堆区是存储动态内存管理的。关于动态内存管理的知识后期会详细介绍。
| 内存 | ||||
|---|---|---|---|---|
| 局部变量函数参数 | 动态内存管理 | 全局变量静态变量 | ||
| 栈区 | 堆区 | 静态区 | ||
二、操作符
1、双目操作符
(1)+和-
+和-用来完成加法和减法。加法和减法都需要两个操作数,位于操作符(+、-)两端的就是它们的操作数,这种操作符叫做双目操作符。
#include <stdio.h>
int main()
{
int a = 4 + 16;
int b = 12 - 8;
printf("%d\n", a);
printf("%d\n", b);
return 0;
}

由上面的代码和运行结果可知,+、- 操作符可应用于C语言程序中加法减法的运算。
(2)*
运算符 * 用来完成C语言中乘法的运算。下面是C语言中乘法运算的代码演示及运行结果。
#include <stdio.h>
int main()
{
int a = 5;
int b = 6;
printf("%d\n",a*b);
return 0;
}

(3)/
运算符 / 用来在C语言中进行除法运算。
除号的两端如果是整数,程序执行的就是整数除法,运算得到的结果也是整数。我们来看下面的代码和运行结果。
#include <stdio.h>
int main()
{
int a = 9 / 4;
float b = 9 / 4;
printf("%d\n", a);
printf("%f\n", b);
return 0;
}

在上面的代码中,变量 a 的类型是整型,变量 b 的类型是浮点型,但它们运算结果的数值是一样的,都是2.0,而不是2.25。原因就在于C语言中的整数除法只会返回整数部分,丢弃小数部分。这就是结论。
那怎么样才能得到真正的浮点型结果呢?在C语言中如果希望得到浮点型的结果,两个运算数就必须至少一个是浮点型数据,这时程序才会执行浮点数除法。
#include <stdio.h>
int main()
{
float b = 9.0 / 4;
printf("%f\n", b);
return 0;
}

在上面的代码中,b = 9.0 / 4;进行的是浮点数除法,得到的结果就是2.25。
为了加深理解,我们再来看一个例子。
#include <stdio.h>
int main()
{
int a = 5;
a = (a / 20) * 100;
printf("%d\n",a);
return 0;
}

a = 5,a / 20 = 0.25。但在C语言中,当两个操作数都是整数时,/ 执行的就是整数除法,所以,a / 20 = 0.25 只返回整数部分,即返回 0,0 * 100 运算结果为 0。
为了得到这个例子真实的结果,这需要将其中一个操作数改为浮点型数值。
#include <stdio.h>
int main()
{
int a = 5;
a = (a / 20.0) * 100;
printf("%d\n", a);
return 0;
}

(4)%
运算符 % 表示求模运算,即返回两个整数相除的余数。需要注意的是,这个运算符只能用于两个整数相除,不能用于浮点数除法。对于负数求模的规则是:结果的正负号由第一个运算数的正负号决定。
#include <stdio.h>
int main()
{
printf("%d\n",12 % 5);
printf("%d\n",-12 % 5);
printf("%d\n",-12 % -5);
printf("%d\n",12 % -5);
return 0;
}

由上面的代码及运行结果可知,运算结果的正负号完全取决于第一个运算数(-12或12)的正负号。
2、赋值操作符
(1)=
在变量创建时赋给变量一个初始值叫做变量的初始化,在变量创建好之后再赋给变量一个值叫做赋值。
#include <stdio.h>
int main()
{
int a = 100; //初始化
a = 200; //赋值
return 0;
}
由此可见,= 是一个可以给变量赋值的操作符。
赋值操作符也可以进行连续赋值,例如:
#include <stdio.h>
int main()
{
int a = 2;
int b = 3;
int c = 0;
c = b = a + 3;
return 0;
}
需要注意的是,连续赋值时,变量是从右向左依次赋值的。从上面的代码中我们不难发现连续赋值的缺点:太过复杂,代码不容易被理解,所以在C语言中,我们一般拆开来写,以便观察。
(2)复合赋值符
我们在写代码时,可能经常会对一个数进行自增自减的操作。例如:
#include <stdio.h>
int main()
{
int a = 2;
a = a + 3;
a = a - 2;
return 0;
}
如果利用复合赋值符,上面的代码就可以改写为:
#include <stdio.h>
int main()
{
a += 3;
b -= 2;
return 0;
}
其中 +=、-= 就是复合赋值符,他们的作用是使原来的变量加上或者减去一个数值。除了 +=、-=之外,还有 *=、/= 等一系列复合赋值符,这些复合赋值符为我们写代码提供了许多便利。
3、单目操作符
(1)++ 和 --
++ 是一种自增操作符,分为前置 ++ 和后置 ++;-- 是一种自减操作符,也分为前置 -- 和后置 --。
前置 ++
计算口诀:先 +1,后使用。
#include <stdio.h>
int main()
{
int a = 10;
int b = ++a;//++ 的操作数是a,是放在a前面的,为前置++,相当于 a = a + 1; b = a;
printf("a = %d\nb = %d",a,b);
return 0;
}

a 原来是 10,先 +1 后 a 变成了 11,再使用是将 a 现在的值赋值给 b,b 得到的也是 11,所以代码运行的结果都是 11。
后置 ++
计算口诀:先使用,后 +1。
#include <stdio.h>
int main()
{
int a = 10;
int b = a++;//++ 的操作数是a,是放在a后面的,为后置++,相当于 b = a; a = a + 1;
printf("a = %d\nb = %d", a, b);
return 0;
}

a 的值是 10,先使用就是将 a 的初始值赋值给 b,b 得到了 10,使用后再 +1,然后 a 变成了 11,所以代码运行的结果是 a = 11,b = 10。
前置 --
前置 -- 与前置 ++ 的道理是一样的,只是把 +1 变成了 -1。
计算口诀:先 -1,后使用。
#include <stdio.h>
int main()
{
int a = 10;
int b = --a;//-- 的操作数是a,是放在a前面的,为前置--,相当于 a = a - 1;b = a;
printf("a = %d\nb = %d", a, b);
return 0;
}

a 原来是 10,先 -1 后 a 变成了 9,再使用是将 a 现在的值赋值给 b,b 得到的也是 9,所以代码运行的结果都是 9。
后置 --
计算口诀:先使用,后 -1。
#include <stdio.h>
int main()
{
int a = 10;
int b = a--;//-- 的操作数是a,是放在a后面的,为后置--,相当于 b = a;a = a - 1;
printf("a = %d\nb = %d", a, b);
return 0;
}

a 的值是 10,先使用就是将 a 的初始值赋值给 b,b 得到了 10,使用后再 -1,然后 a 变成了 9,所以代码运行的结果是 a = 9,b = 10。
(2)+ 和 -
这里的 + 是正号,- 是负号,都属于单目操作符。
运算符 + 对数据的正负值没有影响,是一个可以省略的运算符。运算符 - 用来改变一个数据的正负值,负数在前面加上 - 就会得到正数,正数的前面加上 - 会得到负数。
三、强制类型转换
在操作符中还有一种特殊的操作符是强制类型转换,语法形式如下:
类型 变量 = (类型)数据
例如:
int a = (int)7.98 //将 7.98 强制类型转换为 int 类型,使得编译器在运行代码时只取整数部分。
但强制类型转换最好只在万不得已时使用,正常状态下实现代码才是我们的目标。
本文详细介绍了C语言中的变量创建、分类(全局变量和局部变量)、内存存储,以及各种操作符如双目操作符(+、-、*、/、%)、赋值和复合赋值符、单目操作符(++和--)以及强制类型转换的概念和用法。
726





