定义变量的格式非常简单,如下所示:

数据类型  变量名;

首先要强调的一点是:最后的分号千万不要丢了。变量的定义是一个语句,我们说过,语句都是以分号结尾的。

“数据类型”表示想要存储什么类型的数据就定义什么类型的变量。想要存储整数就定义成 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语言中像下面这种写法就是错误的:

# includeint 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语言中,只要是用大括号{ }括起来的,那么在它的开头都可以定义变量。而且这些在大括号中定义的变量都称为局部变量。此外,在大括号外面也可以定义变量,叫全局变量。这个我们就先不讲了,到后面再讲。

声明:

本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

C语言变量定义和赋值相关推荐

  1. C语言变量定义与赋值

    编程环境:Visual Studio 2017; 电脑系统:WIN10 : 一.定义变量与初始化 一般编程中,考虑编程环境及C89.C99标准,稳妥的做法是:定义变量的同时进行初始化: 1.目的是j的 ...

  2. C++变量定义和赋值

    C++变量定义和赋值 C++是"静态类型(statically typed)语言",含义:在编译阶段检查类型,检查类型的过程称为类型检查(type checking) 动态类型语言 ...

  3. 1.2编程基础之变量定义、赋值及转换 10 Hello, World 的大小

    http://noi.openjudge.cn/ch0102/10/ #include <bits/stdc++.h> using namespace std; int main( voi ...

  4. c语言中变量的大小,C语言变量定义

    C语言变量定义 程序设计就是让计算机按照一定的指令来进行工作,可以说数据的处理是程序设计的主要任务.那么数据是怎么加入到计算机的内存中呢?下面是小编分享的C语言变量定义,欢迎大家阅读!更多相关信息请关 ...

  5. (超实用、简单明了)Mysql变量定义与赋值

    最近在使用存储过程定时创建分区的时候,运行时经常报错,原因都是因为变量的定义或者赋值问题导致的,在此记录一下MySQL的变量定义及赋值,方便自己和大家查阅,各位看到此博客的小伙伴,如有不对的地方请及时 ...

  6. mysql存储过程变量定义_存储过程中MySQL变量定义和赋值

    MySQL变量定义和赋值是我们经常会遇到的问题,下面就为您接受如何在存储过程中MySQL变量定义和赋值,希望对您学习MySQL变量定义方面能有所启迪. 一.MySQL变量的定义 mysql变量定义用d ...

  7. c语言 字母赋值给变量,C++变量(变量定义和赋值)详解

    变量表示计算机内存中的存储位置.使用赋值语句可以将值存储到变量中. 计算机编程中变量的概念与数学上变量的概念有些不同.在编程中,变量是用于保存数据的命名存储位置.变量允许程序员将数据存储到计算机内存中 ...

  8. c语言 变量 定义 使用,C语言为什么要规定对所用到的变量要“先定义,后使用”...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 int a=10; 以上一句话对变量a进行了声明,定义以及初始化 extern int a; 以上一句话仅仅对变量a进行了声明,将a的链接属性设置为ext ...

  9. golang语言变量定义、打印、占位符

    文章目录 题外话 go变量定义 Printf.Println.Print Package fmt 详细介绍 题外话 为什么在有些地方使用go,有些地方使用golang? 两者的关系是什么? 事实上Go ...

最新文章

  1. 第十六届全国大学生智能车竞赛线上赛点赛道审核 - 华南赛区
  2. swift 3d v6.0汉化中文版
  3. MFC CTreeCtrl运用
  4. PHP如何保存当前用户
  5. .NET Core 如何调试 CPU 爆高?
  6. 我在美团Android研发岗工作的那5年,含泪整理面经
  7. 【CodeVS】1023 GPA计算
  8. av_seek_frame() 定位为什么不准呢?
  9. 谷歌大脑小姐姐亲授:如何应聘成功羡煞旁人的AI工程师岗位
  10. 算法基础部分2-分治
  11. mysql union all 等效_Mysql联合查询UNION和UNION ALL的使用介绍
  12. 手机12306买卧铺下铺技巧_手机上买火车票怎么买下铺
  13. 开博了,微博太短,不适合,还是稀饭大的博客
  14. uni-app 启动手机模拟器
  15. RTU和DTU的区别是什么?
  16. 2023年全国最新会计专业技术资格精选真题及答案9
  17. 外码一定是被参照表的主码吗?
  18. 思维导图带你看遍花样百出的各类月饼?
  19. 【金猿产品展】HIO——一体化抖音电商运营投放管理平台
  20. python复制excel模板并保留表格样式

热门文章

  1. java 开发人员工具_Java开发人员的5种工具
  2. JDK 11:轻松取出单文件Java源代码程序
  3. tomcat 正常关闭_Tomcat的带有守护程序和关闭钩子的正常关闭
  4. 为什么在生产中进行调试是如此诱人?
  5. 延迟加载是一种代码气味
  6. openshift_为Openshift + MongoDb应用程序编写验收测试
  7. Apache JMeter教程
  8. 编写下载服务器。 第一部分:始终流式传输,永远不要完全保留在内存中
  9. 21世纪的设计模式:抽象工厂模式
  10. 使用Java 8 Streams进行编程对算法性能的影响