找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2507|回复: 12

C语言变量定义和赋值

 火.. [复制链接]
  • 打卡等级:常驻代表
  • 打卡总天数:34
  • 打卡月天数:6
  • 打卡总奖励:9027
  • 最近打卡:2025-12-17 23:15:51

2823

主题

541

回帖

2万

积分

管理员

积分
22569
发表于 2021-5-10 20:01:51 | 显示全部楼层 |阅读模式
定义变量的格式非常简单,如下所示:
数据类型  变量名;
首先要强调的一点是:最后的分号千万不要丢了。变量的定义是一个语句,我们说过,语句都是以分号结尾的。

“数据类型”表示想要存储什么类型的数据就定义什么类型的变量。想要存储整数就定义成 int 型;想要存储小数就定义成 float 型或 double 型;想要存储字符就定义成 char 型……

“变量名”就是你想给这个变量起个什么名字,通常都是用字母。比如:
int i;
就表示定义了一个整型变量 i。变量名的命名规则稍后会详细地讲。

那么变量定义好之后怎么将数放到这个变量里面呢?首先要理解的是,将一个数字放到一个变量中,这个动作叫“赋值”。“赋”即“给予”的意思,所以“给变量赋值”意思就是将一个值传给一个变量。那怎么赋值呢?是通过赋值运算符=,赋值的格式是:
变量名 =  要赋的值;
它的意思是将=右边的数字赋给左边的变量。比如:
i = 3;
这就表示将 3 赋给了变量 i,此时 i 就等于 3 了。

这里需要注意的是,这里的=跟数学中的“等于号”是不一样的。在刚开始学习C语言的时候,在这一点上大家很难从数学的思维中转变过来。在C语言中=表示赋值,即将右边的值赋给左边的变量,而不是左边的变量等于右边的值。

那C语言中有没有表示相等的运算符呢?这就是双等号==。这个运算符就与数学中的“等于”是同一个意思了。

以上就是变量的定义和赋值,它们是分成两步写的。也可以将它们合成一步,而且事实上,在实际编程中用得最多的也是合二为一的写法。那么怎么合在一起呢?很简单,形式如下:
数据类型  变量名 = 要赋的值;
比如:
int i = 3;
就表示定义了一个变量 i,并把 3 赋给这个变量。它与
int i;
i =3;
是等价的。

在定义变量时也可以一次性定义多个变量,比如:
int i, j;
这就表示定义了变量 i 和 j。这里需要强调的是,当同时定义多个变量时,变量之间是用逗号隔开的,千万别写成分号。这是很多新手最容易犯的错误,即将逗号和分号记混了。

同样也可以在定义多个变量的同时给它们赋值:
int i = 3, j = 4;
中间还是用逗号隔开,最后别忘记输入分号。

最后需要注意的是,在较老的 C89/C90 标准(也称 ANSI C 标准)中,变量只能在程序的开头定义,或者说变量定义的前面不能有其他非声明或非定义的语句。比如在C语言中像下面这种写法就是错误的:
  • # include <stdio.h>
  • int main(void)
  • {
  •     int i;
  •     i = 3;
  •     int j = 4;  //这句是错误的,因为在它前面有一个给变量i赋值的非定义语句
  •     return 0;
  • }


在 VC++ 6.0 或者 VS2010 下编译的时候会提示下面的错误:
error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
但是这种写法在.cpp文件(C++ 源文件)中是允许的,.cpp文件中可以在程序的任意位置定义变量。

其实这与语言本身并没有什么关系,并不是说C语言中变量就不能定义在程序中间。这实际上是与标准有关系的,有些编译器使用的是 C89 标准,C89 标准要求所有声明(比如函数声明、变量定义)必须要写在程序、函数或复合语句的开头,而 C99 的新特性允许语句和声明按任意顺序排列,只要遵循“先声明后使用”的原则就行。

因为 VC++ 6.0 和 VS2010 遵循的是 C89 标准,或者说它不能完全支持 C99 标准,所以它不允许将变量定义在程序中间;而 Linux 中 GCC 编译器遵循的是 C99 标准,所以同样是.c文件,同样是编写C语言,它就可以将变量定义在程序的任意位置,只要是在使用位置之前即可。

其实 C99 标准是比较好的,变量需要的时候才定义,缩短了它的生命周期,节省了内存。因为只要定义变量,系统就会为它分配内存空间,所以如果在前面定义了但是到最后才使用它,那么在使用之前它一直占着内存不放,有点浪费。

但是尽管如此,大家在编程的时候还是尽量按照 C89 的标准编写,即使在完美支持 C99 标准的编译器中也最好不要将声明写在程序的中间。因为 C89 历时较长,现在它仍然是主流,很多编译器仍然只支持 C89 标准或不能很好地支持 C99 标准。所以按 C89 标准编写可移植性更强。

上面提到“复合语句”,在复合语句中也可以定义变量。所谓语句就是以分号结尾的,而复合语句就是多个语句组合在一起的语句。在C语言中,用大括号{ }括起来的多个语句称为复合语句。

复合语句在流程控制中用得特别多,比如后面将要学习的 if、for、while 一般都是跟复合语句的。此时在这些复合语句中也可以定义变量,但是也只能定义在它的开头。主函数 main 下面也是用大括号括起来的,所以主函数 main 下的函数体本质上也是一个复合语句,是一个大的复合语句。

所以它们还是有共性的,也就是说,在C语言中,只要是用大括号{ }括起来的,那么在它的开头都可以定义变量。而且这些在大括号中定义的变量都称为局部变量。此外,在大括号外面也可以定义变量,叫全局变量。这个我们就先不讲了,到后面再讲。

工控课堂 www.gkket.com

0

主题

360

回帖

2280

积分

高级会员

积分
2280
发表于 2021-5-14 11:46:34 | 显示全部楼层
我顶,我顶,我顶顶顶
工控课堂 www.gkket.com

16

主题

433

回帖

2536

积分

高级会员

积分
2536
发表于 2021-5-19 04:44:21 | 显示全部楼层
楼主您的技术水准,我最服你,其他都是浮云
工控课堂 www.gkket.com

0

主题

89

回帖

137

积分

新手上路

积分
137
发表于 2025-11-17 05:51:08 | 显示全部楼层
蹲一波同款,有没有姐妹 / 兄弟推荐?
工控课堂 www.gkket.com

0

主题

137

回帖

396

积分

注册会员

积分
396
发表于 2025-11-17 06:48:21 | 显示全部楼层
我先占个楼,等下再慢慢看~
工控课堂 www.gkket.com

0

主题

152

回帖

383

积分

注册会员

积分
383
发表于 2025-11-17 06:58:15 | 显示全部楼层
楼主辛苦啦,期待下一篇分享!
工控课堂 www.gkket.com

0

主题

93

回帖

137

积分

新手上路

积分
137
发表于 2025-11-17 10:12:20 | 显示全部楼层
笑不活了,评论区比正文还精彩!
工控课堂 www.gkket.com

0

主题

101

回帖

156

积分

新手上路

积分
156
发表于 2025-11-17 16:13:30 | 显示全部楼层
求个链接 / 教程,楼主好人一生平安~
工控课堂 www.gkket.com

0

主题

69

回帖

105

积分

新手上路

积分
105
发表于 2025-11-17 16:22:56 | 显示全部楼层
原来还有这种操作,长见识了!
工控课堂 www.gkket.com

0

主题

89

回帖

265

积分

注册会员

积分
265
发表于 2025-11-17 16:24:14 | 显示全部楼层
被戳中笑点 / 泪点,太真实了!
工控课堂 www.gkket.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|手机版|免责声明|本站介绍|工控课堂 ( 沪ICP备20008691号-1 )

GMT+8, 2025-12-23 03:49 , Processed in 0.084347 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表