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 ...
随机推荐
- 使用md5判断网站内容是否被篡改
该脚本比较简单,判断网站根目录是否被篡改,如果被篡改把篡改的文件发送到管理员邮箱 #!/bin/bash #author:luodi date:// #use md5 to check web sit ...
- model、dao、 service 和Comtroll层的关系
首先这是现在最基本的分层方式,结合了SSH架构.modle层就是对应的数据库表的实体类.Dao层是使用了Hibernate连接数据库.操作数据库(增删改查).Service层:引用对应的Dao数据库操 ...
- php 生成唯一的订单
/** * 生成唯一的订单号 20110809111259232312 * 2011-年日期 * 08-月份 * 09-日期 * 11-小时 * 12-分 * 59-秒 * 2323-微秒 * 12- ...
- 如何在IIS 中配置应用程序(Convert to Application)?
1.打开IIS 2.选择待操作的虚拟目录 3.鼠标右键,点击"Convert to Application” 4.点击connect as 5.选中Specific user,并点击Set ...
- J2SE知识点摘记(五)
1. 引用数据类型的传递 java用引用代替C++中的指针 fun()方法接收的参数是是Change c1,也就是说说fun()方法接受的是一个对象的引用,所以fun方法中所所做的操作就 ...
- logstash indexer和shipper的配置
[elk@zjtest7-frontend config]$ cat logstash_agent.conf input { file { type => "zj_nginx_acce ...
- POJ 3104 Drying(二分答案)
[题目链接] http://poj.org/problem?id=3104 [题目大意] 给出n件需要干燥的衣服,烘干机能够每秒干燥k水分, 不在烘干的衣服本身每秒能干燥1水分 求出最少需要干燥的时间 ...
- poj3094---对字符串的处理
#include <stdio.h> #include <stdlib.h> #include<string.h> int main() { ]; int len, ...
- 配置php中的Oracle扩展
window 1. 从 OTN Instant Client page下载windows客户端安装包,安装包的位数(32/64位)必须和你所使用的操作系统类型.php版本一致.解压安装包至C:\ins ...
- JScript中的prototype(原型)属性研究
今天看到同事使用js中的Prototype,感觉很是新鲜.由此想深入学习一下prototype(英['prəʊtətaɪp] 美['protə'taɪp]n. 原型:标准,模范),在学习prototy ...