在程序运行中,其值不能改变的量成为常量。

在基本数据类型中,常量可分为整型常量、实型常量、符号常量和字符型常量(包括字符常量和字符串常量),现分别介绍如下:

目录:

一、常量

二、C语言标识符

三、变量

    四、变量命名规则

附录:ASCII码表

一、常量

1.整型常量

即整常数,由一个或多个数字组成,可以带正负号

C语言中整型常量可用十进制、八进制和十六进制3种形式表示

十进制整数:由0~9数字组成,不能以0开始,没有前缀

八进制整数:以0为前缀,其后由0~7的数字组成,没有小数部分

十六进制整数:以0x或0X开头,其后由0~9的数字和a~f(或A~F字母组成)

另外长整型常量后加后缀L(或1),无符号常量后加后缀U(或u)

    2.实型常量

C语言中,实数又称浮点数一般有两种表示形式

十进制小数形式:由数字和小数点组成,必须有小数点(例如 .24 也合法)

指数形式:有十进制数、阶码标志“e”或“E”和阶码组成,阶码只能是整数。e和E前面必须有数字,后面必须是整数

实型常量的类型:C编译系统对实型常量不分float和double,都作double处理以更精确,也可以在实型常量后面加上字母f或F来指定其为单精度实型(float)

    3.符号常量

C语言中,可以用一个标识符表示一个常量,称之为符号常量,即标识形式的常量

符号常量是一种特殊的常量,其值和类型是通过符号常量的定义决定的

符号常量在使用之前必须定义,一般形式如下:

#define 标识符常量

(#define是一条预处理命令,其功能是把命令格式中的标识符定义为其后的常量值)

习惯上,为了与程序中的变量名区别,符号常量名一般用大写字母表示

4.字符型常量

包括字符常量和字符串常量

(1)字符常量:

又称字符常数,C语言中的字符常量是用单引号括起来的字符,区分大小写

字符常量有以下特点:

①字符常量只能用单引号括起来

单引号只起界定作用,不表示字符本身

单引号中只能由一个字符,字符可以是字符集中的任意字符

单引号中的字符不能是单引号(')和反斜线(\)

②每个字符常量都有一个整数值,就是该数的ASCII码(见附录)

③字符常量区分大小写

对于一些常用但却难以用一般形式表示的不可显示字符,C语言提供了一种特殊形式的字符常量,即用一个转义标识符“\”(反斜线)开头的字符序列,如表(转义字符及其含义):

(2)字符串常量:

字符串常量是用一对双引号括起来的字符串序列

C语言规定字符串常量的存储方式为:

字符串中的每个字符以其ASCII码值得二进制形式存放在内存中,并且系统自动在该字符串末尾加一个“字符串结束标志”

('\0',即ASCII码值为0的字符,它不引起人和控制动作,也不是可显示的字符)

以便系统判断字符串是否结束。例:字符串"a",实际长度为2,包含'a'和'\0'

二、C语言标识符

用来标识变量名、符号常量名、函数名、类型名和文件名等的有效字符序列称为标识符

1.标识符由字母(A-Z,a-z)、数字(0-9)、下划线“_”组成,并且首字符不能是数字,但可以是字母或者下划线。例如,正确的标识符:abc,a1,prog_to

2.不能把C语言关键字作为用户标识符,例如if ,for, while等

3.标识符长度是由机器上的编译系统决定的,一般的限制为8字符(注:8字符长度限制是C89标准,C99标准已经扩充长度,其实大部分工业标准都更长)

4.标识符对大小写敏感,即严格区分大小写。一般对变量名用小写,符号常量命名用大写

5.标识符命名应做到“见名知意”,例如,长度(外语:length),求和、总计(外语:sum),圆周率(外语:pi)……

6.C语言中把标识符分为三类:关键字,预定义标识符,用户自定义标识符

三、变量

变量只是在程序中可以改变的量,一旦被定义,就具备了3个基本要素:变量名、变量类型和变量值

1.变量名:

变量的命名规则:http://www.cnblogs.com/onedime/archive/2012/11/21/2780149.html

2.变量类型:

C语言中变量遵循“先定义后使用”的原则,变量定义的形式一般为:

变量类型    变量表名

其中变量类型即为变量中所存储的数据类型,数据类型概念详见之前博客「C语言」数据类型及混合运算与类型转换

(1)整型变量

①整型数据在内存中的存放。在C语言中,可以使用十进制,八进制和十六进制数据,但在内存中都以二进制存

②整型变量的基本类型说明符为int。根据占用内存字节数不同可以将整型变量分为如下几类:

基本整型:int,在16位系统中占2字节,32位系统中占4字节

短整型:short int或short,在大多数计算机系统中占2字节

长整型:long int或long,一般占4字节

整型变量的类型:

有符号短整型:short [int]    2byte    -32768~32767

无符号短整型:unsigned short [int]    2 byte 0~65535

有符号整型:int /signed [int]    4 byte    -2147483648~2147483647

无符号整型:unsigned [int]    4 byte    0~4294967295

有符号长整型:long [int]/signed long [int]    4 byte    -2147483648~2147483647

                有符号长整型:unsigned long [int]    4 byte    0~4294967295

③整型数据的溢出。在C语言中,如果一个变量的值超过了其类型所允许的最大值,则会出现溢出现象

具体数据溢出测试详见之前博客「C语言」原码反码补码与位运算

(2)实型变量

①实型数据在内存中的存放。实型数据在内存中占4字节,按照指数形式存储,存放形式如下:

符号位+小数部分+指数部分

注意:所有实型数据均为有符号实型数,没有无符号实型数

至于在内存中究竟分别用多少位表示小数部分和指数部分,ANSI C并无具体规定,由各C编译系统决定

②C语言提供的常用实型变量类型有单精度型(float)和双精度型(double),有时也用长双精度型(long double)

实型变量类型:

单精度型:float    4 byte    -3.4e38~3.4e38    6~7位有效位

双精度型:double    8 byte    -1.7e308~1.7e308    15~16位有效位

长双精度型:long double    16 byte    -3.4e4932~3.4e4932    18~19位有效位

③实型数据的舍入误差。有限的存储单元能提供的有效数字是有限的,因此会存在实型数据的计算舍入误差

字符变量

字符变量是用来存储字符常量的,每个字符占用一个字节的存储空间,类型名为char

字符变量的类型:

                有符号字符型char/signed char    1 byte    -128~127

无符号字符型unsigned char    1 byte    0~255

 

    3.变量值:

在 程序中,一个变量必须先由确定的值后才能参与各种相应的操作

变量可以通过赋值语句或输入语句获得一个值,也可以用初始化的方法获得一个值

四、变量命名规则

内容摘抄自 http://www.cnblogs.com/onedime/archive/2012/11/21/2780149.html

1)命名应当直观且可以拼读,可望文知意,便于记忆和阅读。
标识符最好采用英文单词或其组合,不允许使用拼音。程序中的英文单词一般不要太复杂,用词应当准确。

2)命名的长度应当符合“min-length && max-information”原则。
C 是一种简洁的语言, 命名也应该是简洁的。例如变量名MaxVal 就比MaxValueUntilOverflow 好用。标识符的长度一般不要过长,较长的单词可通过去掉“元音”形成缩写。

另外,英文词尽量不缩写,特别是非常用专业名词,如果有缩写,在同一系统中对同一单词必须使用相同的表示法,并且注明其意思。

3)当标识符由多个词组成时,每个词的第一个字母大写,其余全部小写。比如:
   int CurrentVal;
这样的名字看起来比较清晰,远比一长串字符好得多。

4)尽量避免名字中出现数字编号,如Value1,Value2 等,除非逻辑上的确需要编号。比如驱动开发时为管脚命名,非编号名字反而不好。
初学者总是喜欢用带编号的变量名或函数名,这样子看上去很简单方便,但其实是一颗颗定时炸弹。这个习惯初学者一定要改过来。

5)对在多个文件之间共同使用的全局变量或函数要加范围限定符(建议使用模块名(缩写)作为范围限定符)。
(GUI_ ,etc)标识符的命名规则:

6)标识符名分为两部分:规范标识符前缀(后缀) + 含义标识。非全局变量可以不用使用范围限定符前缀。

7)作用域前缀命名规则。

8)数据类型前缀命名规则。

9)含义标识命名规则,变量命名使用名词性词组,函数命名使用动词性词组。例如:

变量含义标识符构成:目标词+ 动词(的过去分词)+ [状语] + [目的地];

函数含义标识符构成:动词(一般现时)+目标词+[状语]+[目的地];

10)程序中不得出现仅靠大小写区分的相似的标识符。例如:
   int x, X; 变量x 与X 容易混淆
   void foo(int x); 函数foo 与FOO 容易混淆
   void FOO(float x);
这里还有一个要特别注意的就是1(数字1)和l(小写字母l)之间,0(数字0)和o(小写字母o)之间的区别。这两对真是很难区分的,我曾经的一个同事就被这个问题折腾了一次。

11)一个函数名禁止被用于其它之处。例如:
#include "c_standards.h"
void foo(int p_1)
{
   int x = p_1;
}
void static_p(void)
{
   int foo = 1u;
}

12)所有宏定义、枚举常数、只读变量全用大写字母命名,用下划线分割单词。例如:
const int MAX_LENGTH = 100; //这不是常量,而是一个只读变量,具体请往后看
   #define FILE_PATH “/usr/tmp”

13)考虑到习惯性问题,局部变量中可采用通用的命名方式,仅限于n、i、j 等作为循环变量使用。
一定不要写出如下这样的代码:
   int p;
   char i;
   int c;
   char * a;
一般来说习惯上用n,m,i,j,k 等表示int 类型的变量;c,ch 等表示字符类型变量;a 等表示数组;p 等表示指针。当然这仅仅是一般习惯,除了i,j,k 等可以用来表示循环变量外,别的字符变量名尽量不要使用。

14)定义变量的同时千万千万别忘了初始化。定义变量时编译器并不一定清空了这块内存,它的值可能是无效的数据。这个问题在内存管理那章有非常详细的讨论,请参看。

15)不同类型数据之间的运算要注意精度扩展问题,一般低精度数据将向高精度数据扩展。

附录:ASCII码表

截图自 http://tool.oschina.net/commons?type=4

「C语言」常量和变量的表示、应用和变量命名规则的更多相关文章

  1. 「C语言」文件的概念与简单数据流的读写函数

    写完「C语言」单链表/双向链表的建立/遍历/插入/删除 后,如何将内存中的链表信息及时的保存到文件中,又能够及时的从文件中读取出来进行处理,便需要用到”文件“的相关知识点进行文件的输入.输出. 其实, ...

  2. 「C语言」Windows+EclipseCDT下的C语言开发环境准备

    之前写过一篇 「C语言」在Windows平台搭建C语言开发环境的多种方式 ,讨论了如何在Windows下用DEV C++.EclipseCDT.VisualStudio.Sublime Test.Cl ...

  3. 「C语言」原码反码补码与位运算

    尽管能查到各种文献,亲自归纳出自己的体系还是更能加深对该知识的理解.     本篇文章便是在结合百度百科有关原码.反码.补码和位运算的介绍并深度借鉴了张子秋和Liquor相关文章后整理而出.   目录 ...

  4. C语言中变量名及函数名的命名规则与驼峰命名法

    一.C语言变量名的命名规则:(可以字母,数字,下划线混合使用) 1. 只能以字母或下划线开始:2. 不能以数字开始:3. 一般小写:4. 关键字不允许用(eg:int float=2//error  ...

  5. Python变量、方法、类的命名规则

    1. 变量命名总结: - 1.单下划线开头变量:protected - 2.双下划线开头变量:private - 3.双下划线开头,双下划线结尾:系统内置变量 2. 函数命名总结: - 1.私有方法: ...

  6. 「C语言」单链表/双向链表的建立/遍历/插入/删除

    最近临近期末的C语言课程设计比平时练习作业一下难了不止一个档次,第一次接触到了C语言的框架开发,了解了View(界面层).Service(业务逻辑层).Persistence(持久化层)的分离和耦合, ...

  7. 「C语言」在Windows平台搭建C语言开发环境的多种方式

    新接触C语言,如何在Windows下进行C语言开发环境的搭建值得思考并整理. 以下多种开发方式择一即可(DEV C++无须环境准备). 注:本文知识来源于  Windows 平台搭建C语言集成开发环境 ...

  8. 「C语言」数据类型及混合运算与类型转换

    深入学习C语言时,有必要先了解一下数据类型的概念,以及它们之间的混合运算与类型转换. 本篇文章便是根据<C语言程序设计教程>和在线翻阅资料后整理而出.(练习题将逐步更新) 目录:     ...

  9. 「C语言」int main还是void main?

    从大一入学刚接触C到现在已满7个月了,虽然刚开始就知道```int main```才是标准的写法,但一直没有深刻理解为什么不能用```void main```而必须使用```int main```. ...

随机推荐

  1. oracle connect by用法

    先用scott用户下的emp表做实验.emp表有个字段,一个是empno(员工编号),另一个是mgr(上级经理编号)下面是表中所有数据 1 select * from emp start with e ...

  2. 关于发布webservice提示The test form is only available for requests from the local machine

    通过编辑 Web 服务所在的 vroot 的 Web.config 文件,可以启用 HTTP GET 和 HTTP POST.以下配置同时启用了 HTTP GET 和 HTTP POST: <c ...

  3. 【ES6】var、let、const三者的区别

    首先,一个常见的问题是,ECMAScript 和 JavaScript 到底是什么关系? ECMAScript是一个国际通过的标准化脚本语言.JavaScript由ECMAScript和DOM.BOM ...

  4. liunx下查看日志最实用命令和方法

      1.业务系统访问量不是很大的时候,使用这个,有bug的地方操作下,直接看最后操作的日志,就是你刚才操作的地方,好好查bug吧 tail  -fn100  catalina.log   查询日志尾部 ...

  5. C#操作Redis Set 无序集合

    /// <summary> /// redis 无序集合 /// </summary> public static void Redis_Set() { RedisClient ...

  6. Centos 从零开始 (一)

    因为本人也是刚接触 centos 24k纯小白, 所以是从零开始的攻略的 ,可能技术层次理解的不是很深.但这些东西都是无限的测试,之后一步步可行的. 同时我遇到的问题也会不断的刷新在我的微博上. 一. ...

  7. Ruby 踩坑 “Failed to build gem native extension”

    ruby新手,总是会出现这样那样的问题,这里先记录下,希望能解决你得问题. 首先是安装ruby 环境,楼主愚钝,在公司和自己的电脑上来来回回整了好几天,每次安装 gem 包的时候总是报错,错误信息大致 ...

  8. Java内存区域和对象的创建

    文章绝大部分内存摘抄自<深入理解Java虚拟机>,结合了小部分个人理解如果有什么错误,还望指出,如果涉及到侵权,联系博主,立马删除,再次感谢<深入理解Java虚拟机>的作者-周 ...

  9. 百度富文本Ueditor将图片存在项目外路径并回显

    我的毕设中需要一个类似新闻发布的功能,使用到百度富文本编辑器,不过百度富文本编辑器有点坑(只是我太菜了),粘贴图片和回显这个坑坑了我两天时间.效果是这样的: 就是可以在文本中粘贴图片并显示出来,直接说 ...

  10. pyhton基础中的要点一

    1.python变量的命名规范: (1)变量必须以数字,字母,下划线的任意组合 (2)变量建议用驼峰标识,或下划线 (3)变量要有可描述性 (4)不能以数字开头 (5)不能用python的关键字 (6 ...