做者 谢恩铭,公众号「程序员联盟」。 转载请注明出处。 原文:www.jianshu.com/p/8db33987c…git
《C语言探索之旅》全系列程序员
上一课咱们学习的是 C语言探索之旅 | 第一部分第四课:变量的世界(一),内存那档事。相信我,上一课对于内存的初探绝对颇有用。这一课咱们一块儿来学习变量的声明。github
简单地说,变量就是暂时储存在内存中的一小段信息。bash
为何叫作变量呢?函数
变量的英语是 variable,作形容词用的话是“可变的,易变的”之意,因此变量就是在程序运行期间其值能够改变的量。学习
你将会看到,咱们写的程序,经常是充满变量的。ui
在 C语言中(大多数语言也是如此),一个变量有两部分:编码
在 C语言中,每个变量必需要有一个名字。咱们可不能随便取名字,还要遵照一些限制条件:spa
_
),其余一概禁止。如下是一些正确的变量名:操作系统
dog,cat_and_mouse,Catch_1_mouSe,hao123COM
还要记得的是,C语言对大小写敏感,因此,hello 和 Hello 是两个不一样的变量名。
每个程序员都有本身命名变量的习惯,我来讲说本课程的变量命名习惯吧:
但愿你们在以后的练习题中也能尽可能保持一致的命名习惯(其实这是比较通用的命名法)。
命名变量时,尽可能使之清晰易懂,若是我把一个变量 petName(表示是“宠物名字”)缩写为 pN,虽然短小精悍,可是阅读代码的人确定猜不出来是什么意思。
咱们要尽可能作到代码是能够“自注释”的,就是说光看变量名就能够知道这个变量的用途,不少时候就能够省略注释了。
咱们的电脑兄,实际上是一台笨笨的机器,只知道计算,只能处理数字。
可是,在 C语言当中,数字却有好多类型:
怎么有这么多乱七八糟的类型啊,可怜的电脑兄须要帮助...
因此,当你要求电脑储存一个数字时,须要给出类型。倒并非说电脑没办法区分,而是为了电脑能更好地规划,也为了避免占用多余的内存。
所以,在 C语言中,当咱们声明一个变量时,必需要给出变量类型。
下表列出了主要的一些类型:
类型名 | 最小值 | 最大值 |
---|---|---|
signed char | -128 | 127 |
int | -32768 | 32767 |
long | -2147483648 | 2147483647 |
float | -1 x 10^37 | 1 x 10^37 |
double | -1 x 10^37 | 1 x 10^37 |
注意:上面列出的数据是 C语言所保证的最小的取值范围。实际上,你每每能够在上述类型中存放更大的数值。 例如,这里的 int 保证最小取值范围是 -32768 到 32767,是针对 2 字节大小的 int 型来讲的。通常如今的 32 位或 64 位操做系统里 int 是 4 字节,取值范围是 -2147483648 到 2147483647。
不过,最好能稍微记得上表中的值,对你正确选择变量类型有帮助。
固然 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 | 65535 |
unsigned long | 0 | 4294967295 |
上面的表格中,咱们能够看到,unsigned 类型不能储存负数,可是相比 signed 类型的优点是能够储存两倍于 signed 类型的最大值,例如 signed char 最大值是 127,unsigned char 最大值是 255。
char 实际上也能够当作是一种整型(这样说可能有点错误),由于每一个字符的编码实际上也是用整型编的(能够查 ASCII 码表)。若是你将它强行转换为整型,是能够转的。不少时候,咱们都会将 char 转成整型来计算或比较,举个例子,'A'(大写字母 A)对应 65。
为何对于整数,以前的表里面列出了三种类型:char,int,long 呢?一种不够吗?
是这样的,C语言最初建立多种整数类型的目的是为了节约内存。若是咱们声明一个 char 类型的变量,相比于 int 类型,电脑所使用的内存空间就要小。
固然了,在内存颇有限的那个年代(“遥想公瑾当年,小乔初嫁了...”),多种整数类型颇有用。今天,咱们的电脑有至关多的内存(“俱往矣,数风流人物,还看今朝~”),因此通常已经不须要捉襟见肘地声明变量了。不过,对于内存有限的嵌入式的某些应用,仍是须要谨慎地使用整数类型。
作个小结:
作了这么多铺垫,终于到了咱们的主题了。如今,建立一个新的控制台项目,就取名叫 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 = 7; // 有七条狗
return 0;
}
复制代码
此次你若是运行一下,也没有发生什么,屏幕上什么也没显示。但其实一切都悄然在内存中进行,只不过你看不到罢了。
在你电脑深处的某个地方,一小块内存上刚储存了 7 这个值。是否是很神奇呢?
咱们能够试着改变变量的值,好比像这样:
int numberOfDogs;
numberOfDogs = 7;
numberOfDogs = 6;
numberOfDogs = 5;
复制代码
上述例子中,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。
这样作的好处是:你能够肯定这个变量的值是什么,不会是任意的一个数。
有时咱们想要使用一个变量,咱们又但愿它的值在程序中保持不变。就是说,一旦声明,你但愿你的变量就保持它的初始值,没有人能更动它。
这种特殊的变量被称为 constant(表示“恒定的,不变的”)变量,由 const 关键字修饰。
有的书本说 const 修饰的是常量,这种说法是不许确的。const 修饰的是变量,只不过是只读的变量。由于加上 const 以后,值就不能再改变了。
如何声明一个 constant 变量呢?很简单:
只要把 const 关键字放在你的变量的类型前面(放在后面也是能够的),此外,声明 constant 变量时,必须给它赋初值!
例如:
const int NUMBER_OF_DOGS = 7;
复制代码
并非必定要大写 const 变量的名字,只是通常用大写,这已经成为了一个约定俗成的习惯。
除了值不能改变,const 变量和通常变量同样。只不过假如你要在以后的程序中改变 const 变量的值,编译器会提示一个错误,例如:
[Warning] assignment of read-only variable 'NUMBER_OF_DOGS'
(表示“[警告] 试图改变只读变量 NUMBER_OF_DOGS 的值”)
复制代码
今天的课就到这里,一块儿加油吧!
下一课:C语言探索之旅 | 第一部分第六课:变量的世界(三),显示变量内容
我是 谢恩铭,公众号「程序员联盟」运营者,慕课网精英讲师 Oscar 老师,终生学习者。 热爱生活,喜欢游泳,略懂烹饪。 人生格言:「向着标杆直跑」