这篇文章主要对C语言的标识符、关键字、常量、变量的一些细致知识点进行详细的讲解。
比如:1、标识符的命名规范,也就是常量、变量、函数名的命名规则进行规范的讲解。2、C语言的关键字列表。3、常量的定义及其分类。4、对全局变量和局部变量的细节知识点进行细致讲解及为什么要对变量进行初始化、如果没有初始化变量会如何等等进行详解。
在C语言中,常量、变量、函数名称等都是标识符。我们可以将标识符看做一个代号,就像日常生活中物品的名称一样,便于我们对标识符的理解。
标识符的名称可以由用户决定,但也不是想怎么样命名就怎么样命名,也需要遵循以下一些规则:
(1)标识符只能由英文字母(A~Z,a~z)、数字(0~9)和下划线( _ )组成的字符串,并且其第一个字符必须是字母或下划线。如:
int MAX_LENGTH; /*由字母和下划线组成*/
(2)不能使用C语言中保留的关键字。对于那些是关键字,下面的关键字进行介绍的生活会列出来的。
(3)C语言对大小写是敏感的,程序中不要出现仅靠大小写区分的标识符。如:
int x,X; /*变量 x 与 X 容易混淆;提醒一点,一般我们定义一个变量的时候应该养成一个好的习惯,对变量进行初始化,我这里为了直观一点,我就没有对变量进行初始化了。*/
(4)标识符应直观且可以拼读,让别人看了就明白其中的用途。标识符最好采取英文单词或其组合,也不要太复杂,且用词要准确,便于记忆和阅读。切记使用汉语拼音来命名。
(5)标识符的长度应当符合“ min_length && max_information(最短的长度表达最多的信息)”原则。
(6)尽量避免名字中出现数字编号,如temp1、temp2等,除非逻辑上需要编号。这是为了防止我们写程序的时候不肯为命名动脑筋而导致产生无意义的名字。
关键字是C程序中的保留字,通常已有各自的用途(如函数名),不能用来做标识符。例如“ int、float、double;”就是错误的,会导致程序编译。因为 int、float、double等是关键字,不能用做变量名。
下表我列出C语言中的所有关键字。
auto | enum | restrict | unsigned |
break | extern | return | void |
case | float | short | volatile |
char | for | signed | while |
const | goto | sizeof | Bool |
continue | if | static | Complex |
default | inline | struct | Imaginary |
do | int | switch | |
double | long | typedef | |
else | register | union |
什么是常量呢?在程序中,有些数据是不需要改变的,也是不能改变的我们把这些不能改变的固定值称之为常量。由于常量的知识比较简单,下面我会介绍一些常量的分类和例子。
(1)数值常量
#include
int main()
{
printf("123");
return 0;
}
运行程序,即可在命令中输出各个数值常量。
(2)字符常量
#include
int main()
{
printf("A");
return 0;
}
运行程序,即可在命令中输出各个字符常量。
注意:在C语言中,6和 ' 6 '的含义是不一样的,一个数值,可运算;一个是字符,一个符号而已。同样,' a ' 和 'A' 也是不一样的,字符区分大小写。
(3)字符串常量
在hello的程序中,输出的 "hello"就是字符串常量,用双引号括起来的形式显示,其值就是双引号里面的字符串。通常把""称之为空串,即一个不包含任何字符的字符串;而" "则称之为空格串,是包含一个空格字符的字符串。二者不能等同。
说到这里顺便来说一说 ""和''(双引号和单引号)的区别:
如:比较"a"和'a'的不同。
1、书写形式不同:字符串常量用双引号,字符常量用单引号。
2、存储空间不同:在内存中,字符常量只占用一个存储空间,而字符串存储时必须有占用一个存储空间的结束标记'\0',所以 ' a ' 占用一个,而 " a " 占用两个。
3、二者的操作功能也不相同。例如,可对字符常量进行加减运算,字符串常量则不能。
(4)符号常量
当某个常量引用起来比较复杂而又不经常要被用到时,可以将该常量定义为符号常量,也就是分配一个符号给这个常量,在以后的引用中,这个字符就代表了实际的常量。这种用一个指定的名字代表一个常量称之为符号常量,即带名字的常量。定义的格式如下:
#define <符号常量名> <常量>
<符号常量名> 通常使用大写字母表示。<常量>可以是数值常量,也可以是字符常量。一般情况下,符号常量定义命令要放在主函数main()之前。
什么是变量呢?变量用于存储程序中可以改变的数据;变量可分为局部变量和全局变量。好了,下面看一段代码,来初步认识局部变量和全局变量。
#include
int temp=2022; /*全部变量*/
int main()
{
int temp=2023; /*局部变量*/
printf("%d",temp);
return 0;
}
最后输出的结果为 2023,为什么呢?我们要记住的一点就是 当局部变量和全局变量同名时,局部变量优先使用。
(1)变量的作用域和生命周期
1、作用域:作用域(scope)是程序设计概念,通常来说,一段代码中用到的名字并不总是有效或可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
(1)局部变量的作用域是变量所在的局部范围。
(2)全局变量的作用域是整个工程。
2、生命周期:变量的生命周期指的是变量的创建到变量的销毁的一个时间段。
(1)局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
(2)全局变量的生命周期是:整个程序的生命周期。
(2)变量的四个基本属性
1、变量名:一个符合规则的标识符;
2、变量类型:C语言中的数据类型或者是自定义的数据类型;
3、变量位置:数据的存储空间位置。
4、变量值:数据存储空间内存放的值。
程序编译时,会给每个变量分配存储空间和位置,程序读取数据的过程,其实就是根据变量名查找内存中相应的存储空间,从其内读取值的过程。
(3)为什么要对变量的进行初始化
为什么要初始化变量呢?变量的定义是让内存给变量分配内存空间,在分配好内存空间,程序没有运行前,变量会分配一个不可知的混乱值,如果程序中没有对其值进行赋值使用的话,势必会有引起不可预估的结果。所以,使用变量前务必要对其初始化。这样来说吧,当我们创建变量后,会向内存中申请一处空间来存储这个变量,但是这个变量没有初始化时,这块空间内存存储值不可确定(随机值)。在操作系统中,这块内存可能会残留以前程序的遗留数据(垃圾数据)。操作系统释放内存时,只会对分配的内存状态进行改变,内部遗留的数据不会改变。