【C语言学习笔记】《C程序设计语言》 第2章(类型、运算符与表达式)——第1节(变量、常量、数据类型、声明)

Warning:
为了避免非零基础人群感到身体不适、头晕恶心、易怒及粗口,请不要查看以下内容。

第一章我们大体熟悉了C语言,本章开始逐步深入了解C语言。这一章主要学习类型、运算符与表达式。

第2章 类型、运算符与表达式

变量和常量是程序处理的两种基本数据对象。声明语句说明变量的名字及类型,也可以指定变量的初值。运算符指定将要进行的操作。表达式则把变量与常量组合起来生成新的值。对象的类型决定该对象可取值的集合以及可以对该对象执行的操作。本章将详细讲述这些内容。
ANSI 标准对语言的基本类型与表达式做了许多小的修改与增补。所有整型都包括signed(带符号)和unsigned(无符号)两种形式,且可以表示无符号常量与十六进制字符常量。浮点运算可以以单精度进行,还可以使用更高精度的long double类型运算。字符串常量可以在编译时连接。ANSI C还支持枚举类型,该语言特性经过了长期的发展才形成。对象可以声明为 const (常量) 类型,表明其值不能修改。该标准还对算术类型之间的自动强制转换规则进行了扩充,以适合于更多的数据类型。

2.1 变量名

对变量的命名与符号的命名存在一些限制条件。名字是由字母和数字组成的序列,但必须以字母开头。下划线“_”被看作字母,通常用于命名较长的变量名,以提高可读性。

这里需要注意:
1.由于库例程的名字通常以下划线开头,因此变量名尽量不要以下划线开头。
2.区分大小写字母。X与x是两个不同的变量名。在C语言的传统语法中,变量名使用小写字母,符号常量名使用大写字母。
3.类似于 if else int float等关键字是保留给语言本身使用,不能用作变量名。
4.内部名至少保证前31个字符有效,函数与外部变量名可能小于31个字符。对于外部名,ANSI只保证前6个字符的唯一性,且不区分大小写。(老标准,可能已更新,未查。)
5.变量名尽可能从字面上表达变量用途,局部变量一般较短,外部变量一般较长。

关于命名方法,常用的有:驼峰命名法、匈牙利命名、帕斯卡命名法
(以上提及的三种命名方法我会单独发博客讨论并比较优劣,可以查看我的博客C语言专栏)

2.2 数据类型及长度

C语言只提供了下列几种基本数据类型:

char 字符型,占用一个字节,可以存放本地字符集中的一个字符。
int 整型,通常反映了所用机器中整数的最自然长度。
float 单精度浮点型
double 双精度浮点型

此外,还可以在这些基本数据类型的前面加上一些限定符。short与long两个限定符用于限定整型:
short int sh;
long int counter;

在上述这种类型的声明中,关键字int可以省略。通常人们也习惯这样做。

int通常表示特定机器中整数的自然长度。short类型通常为16位,long类型通常为32位,int类型可以为16位或32位。各编译器可以根据硬件特性自主选择合适的类型长度,但要遵守下列限制:
1.short与int类型至少为16位,而long类型至少为32位
2.short类型不得长于int类型,同样,int类型不得长于long类型。

类型限定符signed与unsigned可用于限定char类型或者任何整型。unsigned类型的数总是0或正值,并遵守算术模2n定律,其中n是该类型占用的位数。

2.3 常量

类似于1234的整数常量属于int类型。long类型的常量以字母L或l结尾,如1234L。如果一个整数太大以至于无法用int类型表示时,也将被当作long 类型处理。无符号常量通常以字母u或U结尾。后缀ul或UL表明是unsigned long类型。

浮点数常量中包含一个小数点(如123.4)或一个指数(如1e-2),也可以两者都有。没有后缀的浮点数常量为double类型。后缀f或F表示float类型,而后缀l或L表示long double类型。

整数型除了用十进制表示外,还可以用八进制或十六进制表示。带前缀0的整数常量表示它为八进制形式;前缀为0x或者0X,则表示它为十六进制形式。例如:十进制数31可以写成八进制形式037,也可以写成十六进制形式 0x1f 或 0X1F。八进制与十六进制的常量也可以使用后缀L表示long类型,使用后缀U表示unsigned类型。例如:0XFUL是一个unsigned long类型(无符号长整形)的常量,其值等于十进制数15。

一个字符常量就是一个整数,书写时将一个字符括在单引号内,如’x’。字符在机器字符集中的数值就是字符常量的值。

常量表达式是只包含常量的表达式。这种表达式在编译时求值,而不在运行时求值。

字符串常量也叫字符串字面值,是用双引号括起来的0个或多个字符组成的字符序列。编译时可将多个字符串连接起来,如:“hello,” “world” 等价于 “hello,world”,字符串常量的连接为较长的字符串分散在若干源文件行中提供了支持。

从技术角度看,字符串常量就是字符数组。字符串的内部表示使用一个空字符 ‘\0’ 作为字符串的结尾。因此,存储字符串的物理存储单元比括在双引号中的字符数多一个。

枚举常量是另一种类型的常量。枚举是一个常量整型值的列表,例如:
enum boolen { NO, YES};
在没有显式说明的情况下,mnum类型中的第一个枚举名的值为0,第二个为1,依次类推。如果只指定了部分枚举名的值,那么未指定的枚举名的值将依次向后递增。不同枚举中的名字必须互不相同,同一枚举中不同的名字可以具有相同的值。

枚举为建立常量值与名字之间的关联提供了一种便利的方式。相对于#define而言,它的优势在于常量值可以自动生成。尽管可以声明enum类型的常量,但编译器不检查这种类型的变量中存储的值是否为该枚举的有效值。不过,枚举变量提供这种检查,因此枚举比#define更有优势。此外,调试程序可以以符号形式打印出枚举变量的值。

2.4 声明

所有变量必须先声明后使用,尽管某些变量可以通过上下文隐式的声明。一个声明指定一种变量类型,后面所带的变量表可以包含一个或多个该类型的变量。例如:
int lower, upper, step;
char c, line[1000];
一个声明语句中的多个变量也可以拆开在多个声明语句中声明。

还可以在变量声明同时对变量进行初始化。在声明中,如果变量名的后面紧跟一个等号以及一个表达式,该表达式就充当对变量进行初始化的初始化表达式,例如:
char esc = ‘\’;
int i = 0;
如果变量不是自动变量,则只能进行一次初始化操作,从概念上讲,应该是在程序开始执行之前进行,并且初始化表达式必须为常量表达式。每次进入函数或程序块时,显式初始化的自动变量都将被初始化一次,其初始化表达式可以是任何表达式。默认情况下,外部变量与静态变量都将被初始化为0,未经显示初始化的自动变量的值为未定义值(即无效值)。
任何变量声明都可以用const限定符限定。该限定符指定变量的值不能被修改。对数组而言,const限定符指定数组所有元素的值都不能被修改。const限定符也可以配合数组参数使用,保证数组不被函数修改。如果试图修改const限定符限定的值,其结果取决于具体的实现。

总结

以上就是本节主要内容,我们主要学习了数据类型、变量与常量以及它们的声明。下一节我们继续学习第二章剩余有关类型转换、运算符、表达式的相关知识。

课外知识拓展

驼峰命名法、匈牙利命名、帕斯卡命名法:待更新
进制转换:待更新

发布了14 篇原创文章 · 获赞 0 · 访问量 499

猜你喜欢

转载自blog.csdn.net/AtomTeam/article/details/104122462