C语言入门(4)——常量、变量与赋值
对于基本数据类型量,按其取值是否可改变又分为常量和变量两种。在程序执行过程中,其值不发生改变的量称为常量,其值可变的量称为变量。它们可与数据类型结合起来分类。
常量
常量有字符常量(CharacterConstant)、数字常量和枚举常量。枚举常量以后再介绍,现在我们看看如何使用字符常量和数字常量:
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
printf("character: %c\ninteger:%d\nfloating point: %f\n", 'A', 34, 3.14);
system("pause");
return 0;
}
字符常量要用单引号括起来,例如上面的'}',注意单引号只能括一个字符而不能像双引号那样括一串字符,字符常量也可以是一个转义序列,例如'\n',这时虽然单引号括了两个字符,但实际上只表示一个字符。和字符串字面值中使用转义序列有一点区别,如果在字符常量中要表示双引号"和问号?,既可以使用转义序列\"和\?,也可以直接用字符"和?,而要表示'和\则必须使用转义序列。
计算机中整数和小数的内部表示方式不同,因而在C语言中是两种不同的类型,例如上例的34和3.14,小数在计算机术语中称为浮点数(Floating Point)。这个语句的输出结果和Hello world不太一样,字符串"character: %c\ninteger: %d\nfloating point: %f\n"并不是按原样打印输出的,而是输出成这样:
符号常量
在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。符号常量在使用之前必须先定义,其一般形式为:
#define 标识符 常量
其中#define是一条预处理命令(预处理命令都以"#"开头),称为宏定义命令,其功能是把该标识符定义为其后的常量值。一经定义,以后在程序中所有出现该标识符的地方均代之以该常量值。
习惯上符号常量的标识符用大写字母,变量标识符用小写字母,以示区别。
符号常量的使用:
#include<stdio.h>
#include<stdlib.h>
#define PRICE 30
int main()
{
int num, total;
num= 10;
total= num * PRICE;
printf("total= %d \n", total);
system("pause");
return 0;
}
几点说明:
用标识符代表一个常量,称为符号常量。
符号常量与变量不同,它的值在其作用域内不能改变,也不能再被赋值。
使用符号常量的好处是:含义清楚;能做到“一改全改”。
变量
其值可以改变的量称为变量。变量是计算机存储器中的一块命名的空间,可以在里面存储一个值,存储的值是可以随时变的,比如这次存个字符'a'下次存个字符'b',正因为变量的值可以随时变所以才叫变量。常量有不同的类型,因此变量也有不同的类型,变量的类型也决定了它所占的存储空间的大小。
变量定义必须放在变量使用之前。一般放在函数体的开头部分。要区分变量名和变量值是两个不同的概念。
变量定义举例:
int num,total;
double price = 123.123;
char a = 'a', abc;
应该给变量起有意义的名字。从这个例子中我们也看到两个同样类型的变量可以定义在同一行。需要注意,变量的命名有一定限制,规定必须以字母或下划线_开头,后面可以跟若干个字母、数字、下划线,但不能有其它字符。例如这些是合法的变量名:Abc、__abc__、_123。但这些是不合法的变量名:3abc、ab$。其实这个规则不仅适用于变量名,也适用于所有可以由程序员起名字的语法元素,例如以后要讲的函数名、宏定义、结构体成员名等等,在C语言中这些统称为标识符。
一般来说应避免使用以下划线开头的标识符,以下划线开头的标识符只要不和C语言关键字冲突的都是合法的,但是往往被编译器用作一些功能扩展,C语言库的实现也定义了很多以下划线开头的名字,很容易造成名字冲突,所以除非你对编译器和C语言库特别清楚,一般应避免使用这种标识符。
赋值
定义了变量之后,我们要把值存到它们的存储空间里,可以用赋值语句实现:
char firstletter;
int hour, minute;
firstletter = 'a'; /* 把firstletter赋值 'a' */
hour = 11; /* 给hour赋值 */
minute = 59; /* 给minute 赋值 */
注意,变量一定要先定义再使用,编译器必须先看到你的定义语句,才知道firstletter、hour和minute是变量名,代表一块存储空间,下面使用时才知道去哪里找这个变量的存储空间。还要注意,这里的等号不表示数学里的相等关系,和1+1=2的等号是不同的,这里的等号表示赋值。在数学上不会有i=i+1这种等式成立,而在C语言中,这个语句表示把变量i的存储空间中的值取出来,再加上1,得到的结果再存回i的存储空间中。再比如,在数学上a=7和7=a是一样的,而在C语言中,后者是不合法的。总结一下:定义一个变量,就是分配一块存储空间并给它命名;给一个变量赋值,就是把一个值存到了这块存储空间中。变量的定义和赋值也可以一步完成,这称为变量的初始化,例如要达到上面代码的效果也可以这样写:
char firstletter = 'a';
int hour = 11, minute = 59;
初始化是一种特殊的变量定义语句,而不是一种赋值语句。就目前来看,先定义一个变量再给它赋值和定义这个变量的同时给它初始化所达到的效果是一样的,事实上C语言的很多语法规则既适用于赋值也适用于初始化,但在以后的学习中你也会了解到它们之间的不同,请在学习过程中注意总结赋值和初始化的相同之处和不同之处。
你可以用不同形状的框表示不同类型的变量,这样可以提醒你给变量赋的值必须符合它的类型。如果所赋的值和变量的类型不符会导致编译器报警或报错(这是一种语义错误),例如:
int hour, minute;
hour = "Hello."; /* 错误!*/
minute = "59"; /* 错误! */
注意第3个语句,把"59"赋给minute看起来像是对的,但是类型不对,字符串不能赋给整型变量。既然可以为变量的存储空间赋值,就应该可以把值取出来用,现在我们取出这些变量的值用printf打印:
printf("Current time is %d:%d",hour, minute);
也就是说,变量名除了用在等号左边表示赋值之外,用在别的地方都表示把它的值取出来替换在那里。在计算机中不同类型的变量所占的存储空间大小是不同的,变量的最小存储单位是字节(Byte),在C语言中char型变量的存储空间是一个字节,其它类型的变量占多少个字节在不同平台上有不同的规定,以后再详细讨论。
C语言入门(4)——常量、变量与赋值的更多相关文章
- C语言中结构体变量之间赋值
近期,我阅读了某新员工小刘写的C语言代码,发现其对结构体变量之间的赋值不是非常熟悉. 对于两个同样类型的结构体变量,他均採用的是逐个成员变量直接赋值的形式.例如以下的代码演示样例: 如上代码所看到的, ...
- Go 语言入门教程:变量
基础使用 // base.go 注释package main // 包名import "fmt" // 导入 func main() { fmt.Println(" ...
- TensorFlow入门(常量变量及其基本运算)
1.tensorflow常量变量的定义 测试代码如下: # encoding:utf-8 # OpenCV tensorflow # 类比 语法 api 原理 # 基础数据类型 运算符 流程 字典 数 ...
- 【C语言入门教程】2.2 常量 与 变量
2.2 常量 与 变量 顾名思义,常量是运算中不能改变数值的数据类型,变量是可改变数值的数据类型.根据需要,可将一些在程序中不必改变数值的类型定义为常量,这样也可避免因修改数值造成程序错误.任何改变常 ...
- C语言入门教程-(4)常量和变量
1.常量和变量的概念 程序执行过程中其值不能发生改变的量叫做常量,其值能发生改变的量叫做变量.常量可以直接使用,而变量则必须先定义后才能使用,否则编译器会报错. 2.常量和变量的命名规范 在介绍常量和 ...
- Swift入门学习之一常量,变量和声明
版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请表明出处:http://www.cnblogs.com/cavalier-/p/6059421.html Swift入门学习之一常量,变量和 ...
- 01-java前言、入门程序、变量、常量
今日目标 能够计算二进制和十进制数之间的互转 能够使用常见的DOS命令 理解Java语言的跨平台实现原理 jvm是运行java程序的假想计算机,所有的java程序都运行在它上面.java编写的软件可以 ...
- Swift语言指南(一)--语言基础之常量和变量
原文:Swift语言指南(一)--语言基础之常量和变量 Swift 是开发 iOS 及 OS X 应用的一门新编程语言,然而,它的开发体验与 C 或 Objective-C 有很多相似之处. Swif ...
- C语言_指针变量的赋值与运算,很详细
指针变量的赋值 指针变量同普通变量一样,使用之前不仅要定义说明, 而且必须赋予具体的值.未经赋值的指针变量不能使用, 否则将造成系统混乱,甚至死机.指针变量的赋值只能赋予地址, 决不能赋予任何其它数据 ...
- Apex语言(二)变量与常量
1.变量 凡是交给计算运算(处理)的数据就是变量,用来保存参加运算的数据和计算结果. 变量由变量名来标识. 变量名由字母数字和下划线组成,不能以数字开头. [正确]number,number1,num ...
随机推荐
- ajax读取txt文件
注意url为网络路径 <html><head><script type="text/javascript"> function loadXML ...
- wampserver配置memcache
我用的环境是win7 64位的操作系统,wampserver也是64位,版本是2.5的,其中带的php版本是5.5的. 配置memcache的步骤: 第一步,先下载memcahed.exe和php_m ...
- 点击显示子菜单,离开隐藏子菜单(onmouseout下包含a标签的js解决方法)
<div class="menu"> <a href="javascript:void(0);" id="a_all&quo ...
- Mac OS X 快捷键(完整篇)
不少朋友提出要求,希望有个「高质量」的列表.其实这样的资源真是太多,平果官网就有 快捷键文档(多国语言版本).于是花了20分钟,浏览了一些网站,整理了点资源放过来供大家参考. 快捷键是通过按下键盘上的 ...
- python循环,判断及函数
python中的for循环 #for循环格式(类似Java中的foreach):for 标识符 in 列表名称 : >>> movies = ["movie1", ...
- poj1484---判断保险丝是否烧断
题目输入要求: 2 2 10 //设备数n 接下来的操作数m 保险丝能承受最大电流c5 //电器1的电流7 //2的电流1 //反转开关12 //反转开关2 思路:设置一个flag数组,记得每次 ...
- POJ 3318 - Matrix Multiplication 第一次用随机化解决问题...
随机化还是很厉害的...印象最深的是以前手写快排~~一般加个随机化会使耗时不受输入数据的..时间更加稳定 这个题是人品题了...开始交了好多遍都过不了..多交几次终于过了... Program: #i ...
- Java面试题之谈谈你对Struts的理解
1. struts是一个按MVC模式设计的Web层框架,其实它就是一个大大的servlet,这个Servlet名为ActionServlet,或是ActionServlet的子类.我们可以在web.x ...
- php,ajax登陆退出
利用ajax可以做到页面无刷新登陆. 运行效果 目录结构 site/ css/ images/ js/ site/css/bootstrap.css(bootstrap样式表) site/js/boo ...
- JavaScript 中的面向对象的初步认识
我在学习JS的面向对象编程的时候,总是有两个奇怪的问题. 第一个就是:面向对象在JS中很少用到... 可能是目前自己做的项目还是比较简单,前端方面的任务我几乎都是用面向过程的方式写的,所以就导致,我啃 ...