C语言变量定义和赋值

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

数据类型  变量名;

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

“数据类型”表示想要存储什么类型的数据就定义什么类型的变量。想要存储整数就定义成 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语言中,只要是用大括号{ }括起来的,那么在它的开头都可以定义变量。而且这些在大括号中定义的变量都称为局部变量。此外,在大括号外面也可以定义变量,叫全局变量。这个我们就先不讲了,到后面再讲。

声明:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/338476.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win7计算机盘共享,win7电脑如何共享文件夹 win7电脑共享文件夹操作方法

我们在工作当中,中是喜欢在电脑当中创建一个文件夹,然后把东西放进这个文件夹当中,最后实现共享,这样的方式能够为我们省去不少时间,那么win7电脑如何共享文件夹呢?今天为大家带来win7电脑共享文件夹的操作步骤。win7…

cdi-api_使用CDI简化JAX-RS缓存

cdi-api这篇文章(通过一个简单的示例)说明了如何使用CDI Producers使其在RESTful服务中利用缓存控制语义更加容易 与HTTP 1.0中可用的Expires标头相比, HTTP 1.1中添加了Cache-Control标头,这是急需的改进。 RESTful Web服务可以…

智能驾驶板块_智能驾驶股票有哪些?智能驾驶股票一览

智能驾驶股票有哪些?智能驾驶板块5月8日午后拉升,华东数控(002248)涨停,伊之密(300415)、斯莱克(300382)股价大涨超过9%,中南建设(000961)涨逾4%,高新兴(300098)涨幅超过3%,汇川技术(300124)、亚威股份(002559)、亚太…

调整w7计算机屏幕一直亮,win7系统电脑屏幕不休眠保持常亮状态设置的操作方法...

很多小伙伴都遇到过对1.首先我们点开始-控制面板,打开控制面板2.在控制面板中找到“电源选项”,点击进入3.然后根据你的选择,我这边选择的是平衡,则在平衡的右边点击更改计划设置,自己是哪一项就选哪一项对应的更改计划…

java文章上一篇下一篇_每个人都必须阅读的10篇Java文章

java文章上一篇下一篇一个月前,我们发布了每个人都必须阅读的10篇SQL文章列表。 我们相信jOOQ博客上的文章列表将为我们的读者带来非凡的价值。 jOOQ博客是一个专注于Java和SQL的博客,因此,很自然地,一个月后的今天,我…

【C语言】结构体赋值

结构体在 C 程序中使用的较为频繁,能对数据有一定的封装的作用。对一个结构体赋值时,经常采用的方式是,分别对其成员变量赋值。那么能否将一个结构体用赋值号(“”)直接赋值给另一个结构体呢?网上的答案不一…

vue 传参 微信_vue-router 你可能忽略的知识点

vue-router相信大家都不陌生,并且很多都有实战经验。可能有很多你忽略的一些点。1、丑陋的hash值vue-router 默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载。const router new VueRouter(…

适合计算机64位的cad,【1人回答】求一个能适用于CAD2008的纬地,我的电脑是Win7 64位的-3D溜溜网...

回答:下载方法:1、建立临时目录,如 CAD20082、下载AutoCAD2008安装软件,将文件复制到CAD2008目录下。3、将 CAD2008 文件夹中的 zh-cn 文件夹改名为 en-us;4、下载“AutoCAD 2008 64 位补丁包(下载地址:ACA…

C |格式化输出与变量类型

C语言 格式化输出与变量类型 1、格式化输出在PHP里面,我们一般都是用echo和var_dump以及print_r等来输出调试语句,在C语言中一般用printf来输出,不过由有点特殊,你需要在输出的时候指定输出的数据类型:#in…

n76e885_新唐N76E003,N76E616烧录,调试各种问题集【坑集】

新唐N76E003,N76E616烧录,调试各种问题集【坑集】芒果 • 2018 年 10 月 24 日这篇博文用来记录学习新唐单片机时遇到的问题以及解决的过程和方法。当然也有各种坑。希望这篇文章有机会能够帮助到遇到到同样问题的朋友。1. **可以和STC单片机一样使用串口…

注解默认继承_默认方法和多重继承

注解默认继承最近卢卡斯JOOQ埃德尔发布和文章有关嵌套类及其使用。 这是一个有趣的话题,他的文章一如既往地有趣并且值得一读。 只有一个简短的声明我无法同意,我们有一个简短的回复链,导致了默认方法,以及为什么不能有类似的东西…

暑期社会实践服务器维护,寒假网络维护社会实践报告

今年由于来学校返校报到的时间比较晚,我早到学校一星期了,就在学校附近的网吧做了一星期的网络维护社会实践,把一星期实践所学到的东西和遇到的问题做个总结:一、网络简介网络按照地域可分为:局域网、城域网与广域网。…

信工干货||C语言输入输出语句

数据输入与输出C语言无I/O语句,I/O操作由函数实现putchar( ) getchar( ) printf( ) scanf( ) puts( ) gets( )#include或#include “stdio.h”数据输出字符输出函数格式:putchar(c)参数:c为字符型或整型常量、变量或表…

如何设置网件gs108e_Netgear 网件 EAX80 AX6000规格 无线扩展器 开箱拆解评测

前言众所周知,国行网件RAX系列默认中国区,这就导致了路由器的发射功率不会高,所以很多人觉得国行RAX无线路由器信号覆盖不尽如意。为了解决这个问题,本次为大家介绍一款WiFi 6信号扩展器—EAX80(官网链接),它可以将高强…

maven 可执行 jar_Maven提示:有关可执行jar的所有信息

maven 可执行 jarMaven提示:有关可执行jar的所有信息 可执行jar是分发代码时非常有用的工具。 这意味着,只要将Java安装在客户端计算机上,至少在Windows和Mac上,您的用户只需双击jar即可启动程序。 或者,在命令行上&am…

饥荒海难创建显示专用服务器,饥荒创建世界时一直显示启动服务器 | 手游网游页游攻略大全...

发布时间:2017-08-07TGP版怎么建立服务器呢?各位知道在TGP里如何创建服务器吗?这里给大家带来了TGP版服务器创建开服方法,教大家TGP如何创建服务器,还不会的玩家,一起来了解下吧. >&gt ...标签:攻略发布时间:2015-12-20联机过程中有…

C语言 | 6种常用的转换工具函数盘点

字符串转十六进制代码实现:void StrToHex(char *pbDest, char *pbSrc, int nLen){ char h1,h2; char s1,s2; int i; for (i0; i2; i) { h1 pbSrc[2*i]; h2 pbSrc[2*i1];s1 toupper(h1) - 0x30; //toupper 转换为大写字母 if (s1 > 9) s1…

企业联合体的形式_联合体如何联合?——总包新政下,联合体如何联合?系列三...

以下文字为根据科思顿企业咨询管理(上海)有限公司合伙人胡建于2020年4月10日的网课核心内容摘录,因内容较多,分三个系列发布,包括:系列之一、为什么政策突变?系列之二、联合体是什么?系列之三、联合体如何联…

netflix_学习Netflix管理员–第1部分

netflix最近几天,我一直在与Netflix Governator合作,并尝试使用Governator尝试一个小样本,以将其与Spring Framework的依赖项注入功能集进行比较。 以下内容并不全面,我将在下一系列文章中对此进行扩展。 因此,对于没…

laravel ajax ip,怎么在Laravel中利用AJAX动态刷新部分页面

怎么在Laravel中利用AJAX动态刷新部分页面发布时间:2021-02-17 13:12:43来源:亿速云阅读:119作者:Leah怎么在Laravel中利用AJAX动态刷新部分页面?很多新手对此不是很清楚,为了帮助大家解决这个难题&#xf…