【C语言探索之旅】 第一部分第四课第二章:变量的世界之变量声明
内容简介
1、课程大纲
2、第一部分第四课第二章:变量的世界之变量声明
3、第一部分第四课第三章预告:变量的世界之显示变量内容
课程大纲
我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案。还会带大家用C语言编写三个游戏。
C语言编程基础知识
什么是编程?
工欲善其事,必先利其器
你的第一个程序
变量的世界
运算符
条件表达式
循环语句
实战:第一个C语言小游戏
函数
练习题
习作:完善第一个C语言小游戏
C语言高级技术
模块化编程
进击的指针,C语言王牌
数组
字符串
预处理
创建你自己的变量类型
文件读写
动态分配
实战:“悬挂小人”游戏
安全的文本输入
练习题
习作:用自己的语言解释指针
用基于C语言的SDL库开发2D游戏
安装SDL
创建窗口和画布
显示图像
事件处理
实战:“超级玛丽推箱子”游戏
掌握时间的使用
用SDL_ttf编辑文字
用FMOD控制声音
实战:可视化的声音谱线
练习题
数据结构
链表
堆,栈和队列
哈希表
练习题
第一部分第四课第一章:变量的世界之变量声明
上一课我们学习的是《变量的世界之内存那档事》,相信我,上一课对于内存的初探绝对很有用。这一课我们一起来学习变量的声明。
变量是什么?
简单地说,变量就是暂时储存在内存中的一小段信息。
为什么叫做变量呢,变量的英语是Variable,做形容词用的话是“可变的,易变的”之意,所以变量就是在程序运行期间其值可以改变的量。
你将会看到,我们写的程序,常常是充满变量的。
在C语言中(大多数语言也是如此),一个变量有两部分:
变量的值:变量所储存的值,比如5
变量的名字:是用来标识一个变量的。对于学了上一课有些担心是否需要用内存地址值作为变量的朋友,不用怕,在C语言中,我们不用地址值作为变量名字,我们只需要给它取个名字,编译器会负责把这个名字转换成内存地址值,是不是感觉松了一口气?
给变量起个名字
在C语言中,每一个变量必须要有一个名字。我们可不能随便取名字,还要遵守一些限制条件:
只能包含英文的大小写字母,数字和下划线“_”,其他一律禁止
必须以字母开头
以下是一些正确的变量名:
dog,cat_and_mouse,Catch_1_mouSe,hao123COM
还要记得的是,C语言对大小写敏感,所以,hello和Hello是两个不同的变量名。
每一个程序员都有自己命名变量的习惯,我来说说本课程的变量命名习惯吧:
变量名都以小写字母开头
如果变量名有好几个单词组成,那么除了第一个单词的首字母小写之外,其他单词的首字母都大写
希望大家在之后的练习题中也能尽量保持一致的命名习惯(其实这是比较通用的命名法)。
命名变量时,尽量使之清晰易懂,如果我把一个变量petName(宠物名字)缩写为pN,虽然短小精悍,但是阅读代码的人肯定猜不出来是什么意思。我们要尽量做到代码是可以“自注释”的,就是说光看变量名就可以知道这个变量的用途,很多时候就可以省略注释了。
变量的类型
我们的电脑兄,其实是一台笨笨的机器,只知道计算,只能处理数字。
但是,在C语言当中,数字却有好多类型:
有正整数,如 2,49,186,6715
有含有小数点的正数,如 3.14159,27.62,80.19732
有负整数,如 -7,-999,-4321
有含有小数点的负数,如 -6.753,-78.46,-5641.73
怎么有这么多乱七八糟的类型啊,可怜的电脑兄需要帮助。
所以,当你要求电脑储存一个数字时,需要给出类型。倒并不是说电脑没办法区分,而是为了电脑能更好地规划,也为了不占用多余的内存。
因此,在C语言中,当我们声明一个变量时,必须要给出变量类型。
下表列出了主要的一些类型
类型名 |
最小值 |
最大值 |
---|---|---|
|
-127 |
127 |
|
-32 767 |
32 767 |
|
-2 147 483 647 |
2 147 483 647 |
|
-1 x1037 |
1 x1037 |
|
-1 x1037 |
1 x1037 |
上面列出的数据是C语言所保证的最小的取值范围,当然你也可以声明范围更大的变量。
然而,最好能稍微记得上表中的值,对你正确选择变量类型有帮助。
当然C语言还有其他的变量类型,上表只是列出了常用的。
下面给出C语言所有变量类型:
之前的表格中前三种类型(signed char,int,long)用于声明整数。如:6,74,8931,等
后两种类型(float,double)用于声明浮点数(包含小数点的数)。如:7.64,61.467,等
之后的课程你会看到整数用得最多,因为简单易用。
还有其他类型。
说一下 signed 和 unsigned的区别:signed就是有符号的,就是最开始有正号或者负号(正数或负数),如 7,-5,9.2,-23.8,等。unsigned是无符号数,只能是正数,如35,7461,61.789,等。
所以 signed int就是有符号整数,unsigned int是无符号整数。依此类推。
signed和unsigned放在int,long,char,float,double等类型的前面。
|
0 à 255 |
|
0 à 65 535 |
|
0 à 4 294 967 295 |
上面的表格中,我们可以看到,unsigned类型不能储存负数,但是相比signed类型的优势是可以储存两倍于signed类型的最大值,例如 signed char最大值是127,unsigned char最大值是255。
为什么对于整数,之前的表里面列出了三种类型:char,int,long呢?一种不够吗?
是这样的,C语言最初创建多种整数类型的目的是为了节约内存。如果我们声明一个char类型的变量,相比于int类型,电脑所使用的内存空间就要小。
当然了,在内存很有限的那个年代(啊,遥想公瑾当年,小乔初嫁了...),多种整数类型很有用。今天,我们的电脑有相当多的内存(俱往矣,数风流人物,还看今朝),所有一般已经不需要捉襟见肘地声明变量了。
做个小结:
对于整数,一般用int
对于浮点数,一般用double
声明变量
做了这么多铺垫,终于到了我们本章的主题了。现在,创建一个新的控制台项目,就取名叫Variable吧。
我们一起来学习如何声明变量,也就是请求电脑分配一些内存空间给我们使用。
声明变量其实很简单,你应该知道怎么做了。只需要按照下面的顺序:
写上我们要创建的变量的类型
空一格
写上你给变量取的名字
最后,不要忘了加上分号
比如,我可以这样声明一些变量
int growthOfEconomy;
double averageSalary;
unsigned int numberOfDogs
以上我们所做的被称为“变量声明”,请记住这个术语。你应该在函数的开始声明变量。既然我们目前只有一个函数:main函数,我们就这样声明一个变量:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int numberOfDogs;
return 0;
}
如果你运行上述程序,你会惊讶的发现:这个程序貌似啥也没干。
一些解释
好了,在你要指控我欺骗你之前,容我辩解一下:
事实上,这个程序是干了一些事情,只不过你看不到。当程序读到变量声明那一行时,它很有礼貌地询问电脑是否可以用一些内存空间。
如果一切顺利,电脑会回答“好的,没问题,拿一些内存空间去吧”。通常来说,是会顺利进行的。所以你的变量一般来说(除非内存不够了,但是很少会这样,因为你只是要求分配一个int的空间,很少的)肯定创建了。
一个小“技巧”:如果你有好几个同一类型的变量要声明,没必要每一个变量的声明都写一行,你可以都写在一行上,例如:
int numberOfDogs, numberOfCats, numberOfMouses;
就同时声明了三个int类型的变量:numberOfDogs, numberOfCats, numberOfMouses
然后呢?
既然我们已经声明了变量,那我们接下来可以给变量赋一个值。
没有比这更简单的了。如果你要给上面的变量numberOfDogs赋值,只要这样写
numberOfDogs = 7;
不用做什么其他的了。你写上变量名,然后写一个等号,接着写你要给它的值。
上面,我们刚把7赋给了numberOfDogs(狗的数目)。
因此,我们的完整程序现在是这样的:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int numberOfDogs;
numberOfDogs = ; // 有七条狗
return 0;
}
这次你如果运行一下,也没有发生什么,屏幕上什么也没显示。但其实一切都悄然在内存中进行,只不过你看不到罢了。
在你电脑深处的某个地方,一小块内存上刚储存了7这个值。是不是很神奇呢?
我们可以试着改变变量的值,比如像这样:
int numberOfDogs;
numberOfDogs = ;
numberOfDogs = ;
numberOfDogs = ;
上述例子中,numberOfDogs这个int类型的变量首先会被赋值为7,之后改为6,再改为5。因为你的电脑运算速度太快,所以这一系列操作都是瞬间就完成了。还没来得及眨眼,你的变量numberOfDogs的值就从7,变为6,再变为5。
新的变量的值
现在来看一个很重要的问题:
当我们声明一个变量时,它的初始值是多少呢?
实际上,当电脑读到这一行:
int numberOfDogs;
首先,它在内存中取了一小块出来给numberOfDogs用。但是这时numberOfDogs的值是多少呢?有没有一个默认值(比如0)呢?
答案是:没有。
没有默认值。事实上,内存的这小块区域是给了numberOfDogs,但是上面的值并没有改变,我们并没有清空在这小块内存上原来有的值。所以,你的变量numberOfDogs的初始值就是在那一小块内存上的值,这个值可以是任意的。
如果这块内存的值先前没有改变过,那可能是0。
你并不能确定,有可能初始值是45或182,因为可能之前有一个程序已经改变了那块地址上的值。
所以要小心,最好的解决方案是当你声明变量时,同时为它赋一个初值:
int numberOfDogs = 7;
这里,int型变量numberOfDogs被声明,并且立即被赋值为7。
好处是:你可以确定这个变量的值是什么,不会是任意的一个数。
const关键字
有时我们想要使用一个变量,我们又希望它的值在程序中保持不变。就是说,一旦声明,你希望你的变量就保持它的初始值,没有人能更动它。
这种特殊的变量被称为constant(恒定的,不变的)变量,由const关键字修饰。
有的书本说const修饰的是常量,是不准确的。const修饰的是变量,只不过是只读的变量,因为加上const之后,值就不能再改变了。
如何声明一个constant变量呢?很简单:
只要把const关键字放在你的变量的类型前面(放在后面也是可以的),此外,声明constant变量时,必须给它赋初值!
例如:
const int NOMBBER_OF_DOGS;
并不是一定要大写const变量的名字,只是一般用大写,一个约定俗成的习惯而已。
除了值不能改变,const变量和一般变量一样。只不过假如你要在之后的程序中改变const变量的值,编译器会提示一个错误,例如:
[Warning] assignment of read-only variable 'NOMBBER_OF_DOGS'
(警告:试图改变只读变量NOMBBER_OF_DOGS的值)
第一部分第四课第二章预告:变量的世界之显示变量内容
今天的课就到这里,一起加油吧。
下一课我们继续探寻C语言变量的奇幻世界。
程序员联盟
微信公众号*您若觉得本文不错,请点击画面右上角《···》按钮“分享到朋友圈”或“发送给朋友”或“收藏”
*新朋友请关注「程序员联盟」微信搜公众号
ProgrammerLeague
小编的微信号:
frogoscar
小编的QQ号: 379641629
小编的邮箱: enmingx@gmail.com
(微信和邮箱最常用)
PS: 有朋友反映看手机端的文章太累,其实是可以用浏览器网页来看的
方法1. 点击画面右上角的《···》按钮,然后选择“复制链接”,再把链接黏贴到你的浏览器里面或用邮件发送给自己,就可以在电脑的浏览器里打开了
方法2. 头条网www.toutiao.com,搜索我的自媒体“程序员联盟”,里面有所有文章,也可以直接进这个链接:http://www.toutiao.com/m3750422747/
新朋友如何查看所有文章:
点击“查看公众号”,再点击“查看历史消息”
“程序员联盟”公众号专为程序员,App设计师,各位喜爱编程和热爱分享的小伙伴们推送各样编程相关知识,优秀软件推荐,业界动态等。搜索
ProgrammerLeague 加关注~
持续关注 程序员联盟 微信公众号,更多有趣,有料,有亮点的内容等着你哦!
【C语言探索之旅】 第一部分第四课第二章:变量的世界之变量声明的更多相关文章
- 【C语言探索之旅】 第一部分第四课第一章:变量的世界之内存那档事
内容简介 1.课程大纲 2.第一部分第四课第一章:变量的世界之内存那档事 3.第一部分第四课第二章预告:变量的世界之声明变量 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答 ...
- 【C语言探索之旅】 第一部分第九课:函数
内容简介 1.课程大纲 2.第一部分第九课:函数 3.第一部分第十课预告: 练习题+习作 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. ...
- 【C语言探索之旅】 第一部分第五课:运算那点事
内容简介 1.课程大纲 2.第一部分第五课:运算那点事 3.第一部分第六课预告:条件表达式 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏 ...
- C语言探索之旅】 第一部分第四课第三章:变量的世界之显示变量内容
内容简介 1.课程大纲 2.第一部分第四课第三章:变量的世界之显示变量内容 3.第一部分第五课预告:基本运算 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用 ...
- 【C语言探索之旅】 第三课:你的第一个程序
内容简介 1.课程大纲 2.第一部分第三课:你的第一个程序 3.第一部分第四课预告:变量的世界 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个 ...
- 【C语言探索之旅】 第三部分第二课:SDL开发游戏之创建窗口和画布
内容简介 1.第三部分第二课: SDL开发游戏之创建窗口和画布 2.第三部分第三课预告: SDL开发游戏之显示图像 第三部分第二课:SDL开发游戏之创建窗口和画布 在上一课中,我们对SDL这个开源库做 ...
- 【C语言探索之旅】 第二部分第二课:进击的指针,C语言的王牌!
内容简介 1.课程大纲 2.第二部分第二课: 进击的指针,C语言的王牌 3.第二部分第三课预告: 数组 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言 ...
- 【Linux探索之旅】第一部分第四课:磁盘分区,并完成Ubuntu安装
内容简介 1.第一部分第四课:磁盘分区,并完成Ubuntu安装 2.第一部分第五课预告:Unity桌面,人生若只如初见 磁盘分区 上一课我们正式开始安装Ubuntu了,但是到了分区的那一步,小编却戛然 ...
- 20172327 2018-2019-1 《第一行代码Android》第二章学习总结
学号 2017-2018-2 <第一行代码Android>第二章学习总结 教材学习内容总结 - 活动是什么: 活动(Activity)是最容易吸引用户的地方,它是一种可以包含用户界面的组件 ...
随机推荐
- 用 C++ 标准模板库(STL)的 vector 实现二叉搜索树(BST)
本文由 Justme0翻译自 Code Project 转载请参见文章末尾处的要求. 介绍 众所周知,要建一棵树,我们需要关注它的内存分配与释放.为了避开这个问题,我打算用C++ STL(vector ...
- 单点更新线段树 RMQ
D. Xenia and Bit Operations time limit per test 2 seconds memory limit per test 256 megabytes input ...
- Android Fragment使用
通常地 fragment做为宿主activity UI的一部分, 被作为activity整个view hierarchy的一部分被嵌入. 有2种方法你能够加入一个fr ...
- Macosx Setdns
通过C语言接口在Mac App内部对系统的DNS配置进行改动. Mac OS X设置DNS代码 演示样例代码setDNS.c内容例如以下: #include <SystemConfigurati ...
- ecshop 后台批量上传商品 完整上传
ecshop 后台批量上传商品,之所以无法上传,是因为后台上传php文件方法中没有导入商品原图路径 将ecshop根目录中的admin/goods_batch.php文件全部修改为 <?php ...
- Java设计模式之认识阶段
设计模式是什么? 设计模式(Design pattern)是一套被重复使用.多数人知晓的.经过分类编目的.代码设计经验的总结. 其本质就是继承与接口的组合应用. 为什么要用设计模? 使用设计模式是为了 ...
- 期望dp专题
一直不明白为什么概率是正推,期望是逆推. 现在题目做多了,慢慢好像有点明白了 poj2096 收集bug, 有n个种类的bug,和s个子系统. 每找到一个bug需要一天. 要我我们求找到n个种类的 ...
- Sql还原数据库出现3154错误
要先知道还原的数据库的名字 然后在数据库中新建一个那个名字的数据库, his 是数据库的名字!! RESTORE DATABASE his FROM DISK = 'E:\RDHL文件\HIS相关文档 ...
- CSDN的SDCC大会(2013)中使用的PPT分享
SDCC大会今天开完个.呵呵~ PPT下载链接在最后面,对内幕不感兴趣的可以直接无视下面的种种啰嗦直接“嗖”到最后. 这里说说这个大会中我的Topic. 此前CSDN向我约了一个主题,我回复说, 我可 ...
- cocos2d-x坐标系
在cocos2d-x在,有几种不同的坐标系. 因为有好几个坐标系着一定的差异,他们需要明白,能力更精确的绘制各种图形画面上. 1.屏幕坐标系 只windows通过绘制图形上基本都知道.相应的坐标系统: ...