内容简介

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语言中,当我们声明一个变量时,必须要给出变量类型。

下表列出了主要的一些类型

类型名

最小值

最大值

signed char

-127

127

int

-32 767

32 767

long

-2 147 483 647

2 147 483 647

float

-1 x1037

1 x1037

double

-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等类型的前面。

unsigned char

0 à 255

unsigned int

0 à 65 535

unsigned long

0 à 4 294 967 295

上面的表格中,我们可以看到,unsigned类型不能储存负数,但是相比signed类型的优势是可以储存两倍于signed类型的最大值,例如 signed char最大值是127,unsigned char最大值是255。

为什么对于整数,之前的表里面列出了三种类型:char,int,long呢?一种不够吗?

是这样的,C语言最初创建多种整数类型的目的是为了节约内存。如果我们声明一个char类型的变量,相比于int类型,电脑所使用的内存空间就要小。

当然了,在内存很有限的那个年代(啊,遥想公瑾当年,小乔初嫁了...),多种整数类型很有用。今天,我们的电脑有相当多的内存(俱往矣,数风流人物,还看今朝),所有一般已经不需要捉襟见肘地声明变量了。

做个小结:

  • 对于整数,一般用int

  • 对于浮点数,一般用double

声明变量

做了这么多铺垫,终于到了我们本章的主题了。现在,创建一个新的控制台项目,就取名叫Variable吧。

我们一起来学习如何声明变量,也就是请求电脑分配一些内存空间给我们使用。

声明变量其实很简单,你应该知道怎么做了。只需要按照下面的顺序:

  1. 写上我们要创建的变量的类型

  2. 空一格

  3. 写上你给变量取的名字

  4. 最后,不要忘了加上分号

比如,我可以这样声明一些变量

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语言探索之旅】 第一部分第四课第二章:变量的世界之变量声明的更多相关文章

  1. 【C语言探索之旅】 第一部分第四课第一章:变量的世界之内存那档事

    内容简介 1.课程大纲 2.第一部分第四课第一章:变量的世界之内存那档事 3.第一部分第四课第二章预告:变量的世界之声明变量 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答 ...

  2. 【C语言探索之旅】 第一部分第九课:函数

    内容简介 1.课程大纲 2.第一部分第九课:函数 3.第一部分第十课预告: 练习题+习作 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. ...

  3. 【C语言探索之旅】 第一部分第五课:运算那点事

    内容简介 1.课程大纲 2.第一部分第五课:运算那点事 3.第一部分第六课预告:条件表达式 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏 ...

  4. C语言探索之旅】 第一部分第四课第三章:变量的世界之显示变量内容

    内容简介 1.课程大纲 2.第一部分第四课第三章:变量的世界之显示变量内容 3.第一部分第五课预告:基本运算 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用 ...

  5. 【C语言探索之旅】 第三课:你的第一个程序

    内容简介 1.课程大纲 2.第一部分第三课:你的第一个程序 3.第一部分第四课预告:变量的世界 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个 ...

  6. 【C语言探索之旅】 第三部分第二课:SDL开发游戏之创建窗口和画布

    内容简介 1.第三部分第二课: SDL开发游戏之创建窗口和画布 2.第三部分第三课预告: SDL开发游戏之显示图像 第三部分第二课:SDL开发游戏之创建窗口和画布 在上一课中,我们对SDL这个开源库做 ...

  7. 【C语言探索之旅】 第二部分第二课:进击的指针,C语言的王牌!

    内容简介 1.课程大纲 2.第二部分第二课: 进击的指针,C语言的王牌 3.第二部分第三课预告: 数组 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言 ...

  8. 【Linux探索之旅】第一部分第四课:磁盘分区,并完成Ubuntu安装

    内容简介 1.第一部分第四课:磁盘分区,并完成Ubuntu安装 2.第一部分第五课预告:Unity桌面,人生若只如初见 磁盘分区 上一课我们正式开始安装Ubuntu了,但是到了分区的那一步,小编却戛然 ...

  9. 20172327 2018-2019-1 《第一行代码Android》第二章学习总结

    学号 2017-2018-2 <第一行代码Android>第二章学习总结 教材学习内容总结 - 活动是什么: 活动(Activity)是最容易吸引用户的地方,它是一种可以包含用户界面的组件 ...

随机推荐

  1. 用 C++ 标准模板库(STL)的 vector 实现二叉搜索树(BST)

    本文由 Justme0翻译自 Code Project 转载请参见文章末尾处的要求. 介绍 众所周知,要建一棵树,我们需要关注它的内存分配与释放.为了避开这个问题,我打算用C++ STL(vector ...

  2. 单点更新线段树 RMQ

    D. Xenia and Bit Operations time limit per test 2 seconds memory limit per test 256 megabytes input ...

  3. Android Fragment使用

                     通常地 fragment做为宿主activity UI的一部分, 被作为activity整个view hierarchy的一部分被嵌入. 有2种方法你能够加入一个fr ...

  4. Macosx Setdns

    通过C语言接口在Mac App内部对系统的DNS配置进行改动. Mac OS X设置DNS代码 演示样例代码setDNS.c内容例如以下: #include <SystemConfigurati ...

  5. ecshop 后台批量上传商品 完整上传

    ecshop 后台批量上传商品,之所以无法上传,是因为后台上传php文件方法中没有导入商品原图路径 将ecshop根目录中的admin/goods_batch.php文件全部修改为 <?php ...

  6. Java设计模式之认识阶段

    设计模式是什么? 设计模式(Design pattern)是一套被重复使用.多数人知晓的.经过分类编目的.代码设计经验的总结. 其本质就是继承与接口的组合应用. 为什么要用设计模? 使用设计模式是为了 ...

  7. 期望dp专题

    一直不明白为什么概率是正推,期望是逆推. 现在题目做多了,慢慢好像有点明白了 poj2096 收集bug,  有n个种类的bug,和s个子系统.  每找到一个bug需要一天. 要我我们求找到n个种类的 ...

  8. Sql还原数据库出现3154错误

    要先知道还原的数据库的名字 然后在数据库中新建一个那个名字的数据库, his 是数据库的名字!! RESTORE DATABASE his FROM DISK = 'E:\RDHL文件\HIS相关文档 ...

  9. CSDN的SDCC大会(2013)中使用的PPT分享

    SDCC大会今天开完个.呵呵~ PPT下载链接在最后面,对内幕不感兴趣的可以直接无视下面的种种啰嗦直接“嗖”到最后. 这里说说这个大会中我的Topic. 此前CSDN向我约了一个主题,我回复说, 我可 ...

  10. cocos2d-x坐标系

    在cocos2d-x在,有几种不同的坐标系. 因为有好几个坐标系着一定的差异,他们需要明白,能力更精确的绘制各种图形画面上. 1.屏幕坐标系 只windows通过绘制图形上基本都知道.相应的坐标系统: ...