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 ...
随机推荐
- mysql 存在该记录则更新,不存在则插入记录的sql
转 http://www.cnblogs.com/zeroone/articles/2298929.html , ‘yourname') ON DUPLICATE KEY UPDATE auto_na ...
- ThinkPHP框架研究之一 基本函数 M和D的区别
http://my.oschina.net/wxweven/blog/56563?fromerr=32n4Nf7V https://segmentfault.com/q/101000000298807 ...
- 大型网站性能优化(页面(HTML)优化的方法)
页面(HTML)优化的方法 除了语言层面上进行优化外,对Web开发,HTML的优化将很大程度上减轻服务器的负载,提高网站的性能 1). 减少HTTP请求数.打开网页,浏览器会发出很多请求,图片,脚本, ...
- 浅析C++内存分配与释放操作过程——三种方式可以分配内存new operator, operator new,placement new
引言:C++中总共有三种方式可以分配内存,new operator, operator new,placement new. 一,new operator 这就是我们最常使用的 new 操作符.查看汇 ...
- java中文乱码解决之道(二)—–字符编码详解:基础知识 + ASCII + GB**
原文出处:http://cmsblogs.com/?p=1412 在上篇博文(java中文乱码解决之道(一)—–认识字符集)中,LZ简单介绍了主流的字符编码,对各种编码都是点到为止,以下LZ将详细阐述 ...
- CSS3属性text-overflow(省略符)实战开发详解
先看一下效果: 好了,看完了效果,现在正式开始今天的开发旅程吧! 首先我们先创建html页面,代码如下所示(红色文字即是我们Demo的主要内容): <!DOCTYPE html> ...
- table+js实现网站左侧列表下拉隐藏
<script language="javascript"> function showHide(obj){ ...
- vue+webpack一些知识
使用mac的用户需要获取权限才可以使用npm install指令 设置node目录的权限指令 sudo chmod -R 777 /usr/local/lib/node_modules/ 大家都知道国 ...
- bootstrap-js(4)标签页
实例 标签页(Tab)在 Bootstrap 导航元素 一章中介绍过.通过结合一些 data 属性,您可以轻松地创建一个标签页界面. 通过这个插件您可以把内容放置在标签页或者是胶囊式标签页甚至是下拉菜 ...
- 安装SQL Server 2012过程中出现“启用windows功能NetFx3时出错”(错误原因、详细分析及解决方法)以及在Windows Server2012上安装.NET Framework 3.5的详细分析及安装过程
问题:在服务器(操作系统为Windows server 2012)上安装SQL Server 2012的过程中,安装停留在下图所示的界面上,显示”正在启用操作系统功能NetFx3”随后出 ...