C语言变量及其相关运算

本文详细介绍了C语言中的变量创建、分类(全局变量和局部变量)、内存存储,以及各种操作符如双目操作符(+、-、*、/、%)、赋值和复合赋值符、单目操作符(++和--)以及强制类型转换的概念和用法。

目录

一、变量

1、变量的创建

2、变量的分类

3、全局变量与局部变量在内存中的存储

二、操作符

1、双目操作符

(1)+和-

(2)*

(3)/

(4)%

2、赋值操作符

(1)=

(2)复合赋值符

3、单目操作符

(1)++ 和 --

前置 ++

后置 ++

前置 --

后置 --

(2)+ 和 -

三、强制类型转换


一、变量

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 类型,使得编译器在运行代码时只取整数部分。

       但强制类型转换最好只在万不得已时使用,正常状态下实现代码才是我们的目标。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值