1.常量和变量的概念

程序执行过程中其值不能发生改变的量叫做常量,其值能发生改变的量叫做变量。常量可以直接使用,而变量则必须先定义后才能使用,否则编译器会报错。

2.常量和变量的命名规范

在介绍常量和变量的命名规范之前,我们先了解一下什么是标识符和关键字。

2.1 标识符

标识符,用来标识符号常量名、变量名、函数名、数组名、文件名、类名、对象名等。简单的将就是大家取的名字~~有效标识符的构成规则如下:

  • 1)第一个字符必须是字母(大小写都行)或下划线,不能是数字;

  • 2)后跟字母(大小写都行)、下划线或数字组成;

  • 3)标识符中的大小写字母有区别。如,变量sum,Sum,SUM代表三个不同的变量;

  • 4)不能与编译系统已经预定义的、具有特殊用途的保留标识符(即关键字)同名。比如,不能将标识符命名int,char,float,break,case,for,while,return等等;
    下面列出几个有效的标识符:

teemo    
Garen
move_name
dj8023  
_temp  
i
the_hero_is_Garen

下面列出几个无效的标识符:

8times    //第一个字符必须是字母(大小写都行)或下划线,不能是数字。
price/tea    //后跟字母(大小写都行)、下划线或数字组成,/不是属于之中。
my name    //含有空格
x+y    //包含了'+'号
int    //C语言程序中的关键字

2.2 关键字

C语言中具有特殊含义的英文单词,通常用于构成语句,存储数据,定义数据类型等。下面列出了C语言中的一些保留字。这些保留字不能作为常量名、变量名或其他标识符名称。

  • 1)基本数据类型
    int:声明整数类型
    float:声明浮点型
    double:声明双精度浮点型
    char:声明字符类型
    void:空类型,声明函数无返回值或无参数

  • 2)流程控制
    条件判断:if、else、switch、case、default等
    循环:while、do、for、break、continue
    返回:return

在本节中,先了解一下就行,有很多不明白的关键字后面会讲到。

2.3 命名规范

首先,必须是有效的标识符。在这个基础上,我们使用的命名最好能做到看名字就明白它表示什么。如果要使用一个变量来表示teemo的血量,我们可以将其命名为teemo_hp或者teemoHp,而不是随便的命名为a或者b之类的。遇到两个或者更多的单词组成的名称,我们通常用下划线字符将它们连接起来,或者从第二单词开始将每一个单词的第一个字母大写。

还有一些程序员可能会在变量中加入描述变量类型或者内容的前缀。例如,可以将整型变量teemoHp命名为nTeemoHp,其中n表示整数值。这样做的好处是在你遇到这个变量的时候,可以很直接的知道这个变量的类型。常用的几种前缀有:c(表示单个字符)、p(表示指针)等。另外,常量的标识符习惯用大写字母表示,变量的标识符习惯用小写字母表示。单下划线打头的标识符一般代表标准数据库的变量,双下划线打头的标识符一般代表编译器的变量。

关于命名,想说的是,命名可以根据自己的需要、喜好和个人风格来使用,但起码要保证一个程序里面的风格是一致性的。在团队共同开发中,则需要按照规范进行命名。规范的命名不仅可以让自己以后看的明白,也利于给团队其他人维护代码。

3.常量

3.1 直接常量

直接常量又可以叫做字面常量,通过数据来直接表现。在C语言中,编译器会自动根据字面常量的表示形式确定其类型。例如:

y = x + 3;

在上面的程序中,3将会被编译器作为int类型的常量。再例如:

y = x + 3.0;

3.0是小数,则会被编译器作为float类型的常量。当然,字符也有常量,不过和整型常量不同,字符常量必须使用单引号来进行表示。字符常量是使用单引号括起来的一个字符,不能是多个字符。例如,下面都是合法的字符常量:

'a'、'B'、'#'、'8'

需要强调的是只能是单引号,并且只有一个字符,字符可以是ASCII码中的任意字符。如果数字被定义成字符常量的话,就不能代表数字字面的量了。如果参与运算,它的值将会是对应的ASCII码。比如上面的字符常量'8',在ASCII码对应的值为56。这个时候参与运算,比如加上1,将得到的整数值是57。

3.2 符号常量

在C语言程序中,还可以使用一个符号常量来代替常量。使用符号常量有两个好处,一个是如果需要修改常量的话,只要修改定义符号常量的语句就行;另一个好处,使得程序中常量的含义更加清楚。定义符号常量有两种方法:#define宏定义和const语句定义。在这里我就先不展开讲了,大家过一眼就好了,后面的教程会详细的讲解宏定义和const的应用。

4.变量

在程序中,我们会使用到各种变量。当我们创建一个变量时,就会在内存中开辟一些空间。一般变量先声明,然后初始化。

4.1 声明变量

C语言中使用声明语句,来声明一个变量,指出存储类型并提供位置标签。C语言中,变量要求先声明后定义,这样做的好处在于:

  • 1.确保后面引用的变量名和声明的一致,减少了输入错误。如声明了变量teemo,在后面引用时,不小心输成了timo,编译器将会报错,指示timo未声明。

  • 2.在声明变量时,会指定变量的类型,当进行运算的时候,编译器就可以检查运算是否合法。

  • 3.编译器根据指定变量的类型分配内存。

声明变量的一般语法格式:

类型 变量名;

其中,类型是数据类型的关键字,比如说int表示整数类型、double表示双精度浮点类型。变量名则需要符合命名规范的标识符。下面我们将会通过简单的程序,来介绍如何声明变量。比如说:我们要声明一个变量表示提莫的血量。在C语言中,就可以表示:

int teemoHp;
float teemoAttack;

int 是一种数据类型,表示是整数。
teemoHp 是一个标识符,这里代表整数类型的血量。
; 表示一个语句结束。

我们从计算机的角度来讲,第一条语句指出程序需要一个存储空间,用这个内存来存储一个整数。那么在C语言中,写上这个声明语句,程序就会将计算机的某一区域内存,命名为teemoHp,并在这个内存中存放整数类型。teemoHp这个标识符就是一个变量,它代表teemo的血量。这条语句创造了一个变量teemoHp,我们把这个过程叫做变量声明。

同类型的变量还可以在一个语句中同时声明多个变量,各变量之间用逗号分隔开,例如:

int teemoHp, garenHp;

上面语句声明了两个整数类型的变量,等同于:

int teemoHp;
int garenHp;

4.2 变量初始化

在对变量声明时,编译器会给变量分配内存,但分配的这个内存并不会被清空。这个就和你删除电脑中的文件一样,虽然你点了删除这些文件,但实际上这些文件还会存在,只是我们看不到了。只有当你再次存储文件覆盖这些文件时,这些文件才算是删除了。这也是一些删除的文件,也可以通过某些手段来恢复的重要原因。那么就可能出现编译器给我们分配的内存,已经有存储值的情况,而且这个值对我们来说还是不确定的。为了防止程序因为不确定的值而出现不可预料的情况,我们在使用变量的时候就要对其进行赋初值,使得变量的值是确定的,这种方法就是初始化。

下面再来看一个简单的实例,我们要把提莫的血量作为一个变量,提莫的血量值是586。在C语言中,就可以表示成:

int teemoHp;
teemoHp = 586;

我们先声明了一个变量teemoHp,然后将常量586保存到变量teemoHp中。第二个语句中,“=”也叫赋值操作符,这个过程叫做赋值。赋值是指数据放到内存的过程,我们把这个过程叫做变量的赋值;又因为是第一次赋值,也称变量的初始化。

在声明变量的同时可以直接对其进行赋值,上面的两个语句,又可以直接表示成:

int teemoHp = 586;

如果多个变量具有相同的值,还可以进行连续的赋值。例如:

int teemoHp, garenHp;
teemoHp = garenHp = 586;

但不可以在声明的时候对其进行连续赋值。像下面语句一样:

int teemoHp = garenHp = 586;//报错

这样写会导致标识符garenHp没有声明,所以编译器报错。

如果要在一个语句中这样做,我们应该写成下面语句:

int teemoHp = 586, garenHp = 586;

我们还可以写成:

int teemoHp, garenHp = 586;
teemoHp = 586;

我们知道,在实际中,提莫通过等级的提升以及出的装备,血量的值会不断变化,那我们应该怎么办呢?答案是,血量的值是一个变量,我们可以通过再次赋值改变血量的值,例如:

int teemoHp = 586;
teemoHp = 1000;
teemoHp = 5000;

再次的赋值,会把第一次的数据覆盖掉。也就是说,teemoHp中最后的值是5000(这怕不是一个肉提莫),这也是因为586、1000已经被覆盖掉了。

5.总结

总结一下,本节内容主要介绍了C语言程序的常量和变量。介绍了常量和变量的概念以及命名规范,然后讲解了它们的一些基本使用方法。

6.练习

4-1 对下面进行判断,哪些是合法标识符,哪些又不是合法标识?

su8
_total
Class
Student_name
louts_1_2_3
BASIC
M.D.John
\#123
3D45
a>b

4-2 编写一个程序,对盖伦的属性值,找到合适的类型来定义并且为其赋值。
名字:简称为G
生命值:455
移动速度:340
攻击速度:0.625
攻击范围:125
生命回复:8.25
攻击力:59.5

可以在评论中,写下你们的练习答案。

之后的文章会给大家带来更精彩的内容
欢迎关注我的知乎专栏:程序员基础知识
获取练习答案以及更多实战项目
欢迎关注我的公众号:程序员基础知识
交(gao)流(ji)群:493584686

C语言入门教程-(4)常量和变量的更多相关文章

  1. 《Ruby语言入门教程v1.0》学习笔记-01

    <Ruby语言入门教程v1.0> 编著:张开川 邮箱:kaichuan_zhang@126.com 想要学习ruby是因为公司的自动化测试使用到了ruby语言,但是公司关于ruby只给了一 ...

  2. C语言入门教程-(5)格式化输入输出

    1.输入和输出 在程序的使用中,我们经常可以看的这么一个场景:用户需要输入数据,经过程序运算,得到结果后输出.在C语言中,输入数据和输出数据都是由库函数完成的,通过语句来输入/输出. 2.格式化输出— ...

  3. 《JavaScript语言入门教程》记录整理:运算符、语法和标准库

    目录 运算符 算数运算符 比较运算符 布尔运算符 二进制位运算符 void和逗号运算符 运算顺序 语法 数据类型的转换 错误处理机制 编程风格 console对象和控制台 标准库 Object对象 属 ...

  4. Go语言入门教程(十)之函数

    Hello 各位小伙伴大家好,我是小栈君,假期一眨眼就过去了.不知道大家玩的是否开心呢? 上次我们讲到了关于Go语言的流程控制,小栈君也希望小伙伴跟着小栈君一步一个脚印的敲一下代码,相互进步.本期我们 ...

  5. day01_前言、入门程序、常量、变量

    day01_前言.入门程序.常量.变量 sysout :System.out.println(); Java 概述 本节主要内容: java 概述.常 DOS 命令.JRE.JDK 与 JVM.环境搭 ...

  6. 《JavaScript语言入门教程》记录整理:入门和数据类型

    目录 入门篇 js介绍 历史 基本语法 数据类型 概述 null 和 undefined 数值 字符串 对象 函数 数组 本系列基于阮一峰老师的<JavaScrip语言入门教程>或< ...

  7. 《JavaScript语言入门教程》记录整理:面向对象

    目录 面向对象编程 实例对象与 new 命令 this关键字 对象的继承 Object对象的方法 严格模式(strict mode) 本系列基于阮一峰老师的<JavaScrip语言入门教程> ...

  8. c语言该怎么入门?C语言入门教程(非常详细)

    C语言是一门面向过程的编译型语言,它的运行速度极快,仅次于汇编语言.C语言是计算机产业的核心语言,操作系统.硬件驱动.关键组件.数据库等都离不开C语言:不学习C语言,就不能了解计算机底层. 这套「C语 ...

  9. Go 语言入门教程,共32讲,6小时(已完结)

    Go语言入门教程,共32讲,6小时(完结) 在B站:https://www.bilibili.com/video/BV1fD4y1m7TD/

随机推荐

  1. Idea安装Python插件并配置Python SDK

    第一步:在help/about中查看IDEA版本,作者IDEA 15.0.2 第二步:在http://plugins.jetbrains.com/plugin/631中下载python-143.116 ...

  2. [转帖]Intel为何吊打AMD,先进半导体工艺带来什么?

    Intel为何吊打AMD,先进半导体工艺带来什么? 2016-3-10 15:38  |  作者:Strike   |  关键字:超能课堂,半导体工艺,CPU制程 分享到       按照摩尔定律的发 ...

  3. logback错误日志发送邮件

    logback 一.介绍 logback是由log4j的作者开发的一个开源日志组件,用以替代log4j. logback由3个部分组成: ♦ logback-core (基础模块) ♦ logback ...

  4. URL query string中文字符问题

    如果URL的query string中包含中文字符,在不做特殊处理的情况下通过 request.getParameter 方法是获取不到正确的信息的,这是由于下面的两个机制造成的 浏览器会自动对URL ...

  5. Extend to Palindrome UVA - 11475(补成回文串)

    题意: 就是用最少的字符把原字符串补成回文串 解析: emm/.../网上都是用kmp和后缀数组做的 我没想到这俩的思路...emmm... 想到了exkmp的  就是原串和逆串匹配一下  注意要保证 ...

  6. 虚拟主机、ECS云服务器、VPS区别汇总

    想做一个网站,但是在各种类型的服务器琳琅满目,现在总结一下市场上常见的几种服务器. 1.虚拟主机 虚拟主机就是利用虚拟化的技术,将一台服务器划分出一定大小的空间,每个空间都给予单独的 FTP 权限和 ...

  7. hbase 自定义过滤器

    1.首先生成自定义过滤器,生成jar包,然后拷贝到服务器hbase目录的lib下. 1.1 自定义过滤器CustomFilter import com.google.protobuf.InvalidP ...

  8. ZJOI2018酱油记

    ZJOI2018酱油记 前言 作为\(HN\)高一蒟蒻选手,毕竟去了趟\(ZJOI\)玩泥巴 不写点游记还是不太好吧. 今天来补一补. Day0 星期天,中午,我们一群人滚到了学校门口 然后集合,滚去 ...

  9. 【ARC083E】Bichrome Tree

    Description ​ 给一棵\(n\)个节点的树,和一个长度同样为\(n\)的非负整数序列\(x_i\). ​ 请尝试对每个节点染黑或白两种颜色,并确定一个非负整数权值. ​ 问是否存在一种方案 ...

  10. 【BZOJ2654】tree

    Time Limit: 30 Sec Memory Limit: 512 MB Description ​ 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树 ...