C 变量与常量 数据类型
终于正式开始学C做笔记了 本来想一长篇说点的,想想还是边看边记,记得少点搜索起来方便。
变量与常量的命名规范与PHP类似,常量全部用大写字母,而变量使用小写字母,C也同样区分大小写,命名时不要以下划线_
开头。局部变量一般使用较短的变量名,外部变量一般使用较长的名字。
保留字符的问题就不多说了,差不多就是那回事。
如同PHP那样,看一下C的数据类型:
-- char 字符型,占用一个字节,可以存放本地字符集中的一个字符
-- int 整型,通常反映了所用机器中整数的最自然长度
-- float 单精度浮点型
-- double 双精度浮点型
另外 这些基本类型前面还可以加限定符。
如short
,long
(限定加在整型前),此时int
可以省略,short
类型通常是16位,long
通常为32位,int
可以为16位或则32位,各编译器自主选择合适的编译长度,但遵循以下限制:
short
和int
类型至少16位,long
至少32位,short
类型不得长于int
类型,int
类型不得长于long
类型
signed
,unsigned
可用于限定char
类型或者任何整型,unsigned
类型的数总是正数或者0,和其他语言一样可以把范围扩大一倍(比如原来是-128~127,unsigned
就变成了0~255)
long double
类型表示高精度的浮点数,float
,double
,long double
可以表示相同的长度,也可以表示两种或三种不同的长度。
变量声明时,默认情况下,外部变量与静态变量都被初始化为0,未经显式初始化的自动变量的值为无效值。(自动变量是什么:C 外部变量的使用)
变量可以通过const
限定符限定,值不能被修改,对鼠族而言,限定数组所有元素的值都不能被修改(有点像是常量了)
const double e = 2.71828;
const char msg[] = "warning";
也可以配合函数使用:
int strlen(const char[]);
函数不能修改数组的值。
总之,虽然看着少很简单,但是参考PHP的变量类型,总觉得深深的不够用啊。
常量声明时,long
类型以字母l
或者L
结尾,如果一个整数太大以至于无法用int
表示,也将会被当作long
类型处理,无符号常量以字母u
或者U
结尾,ul
或者UL
表示unsigned long
。
没有后缀的浮点数常量为double
类型,后缀f
或者F
表示float
类型,后缀l
或L
表示long double
类型。
整型数除了十进制外,带前缀0
表示为八进制形式,前缀为0x
或者0X
则表示为十六进制形式,同样也可以用上面说的结尾。
字符常量就是一个整数,如'x'
可以参与运算,如'0'
不是数字0,在ASCII中表示48,也可以进行比较,或者是像其它整数一样参与运算。
转义字符只表示一个字符。
使用\ooo
或者\xhh
可以表示八进制和十六进制,如:
#define VTAB `\013`
#define BELL `\007`
#define VTAB `\xb`
#define BELL `\x7`
常量可以是字符串,如"I am a string"
(也叫字符串字面量)在字符串中用\"
表示双引号字符串。
并且:"hello " "world"
等于"hello world"
字符串内部使用一个空字符\0
作为结尾,所以储存字符串的物理单元比双引号内的字符数多一个。
可以用标准库(<string.h>
)函数strlen(s)
返回字符串参数s的长度,不包末尾的\0
应此'x'
与"x"
是不同的,前者是一个整数,而后者是一个字符x以及一个结束符\0组成的字符数组。(这样也就能解释之前的程序为什么我们用的都是单引号如'\n'
来检测换行符)
很特殊的是一个枚举常量的东西,以前从来没有接触过,有点像是PHP键值对数组,不过更为特殊
一般的常量都是用#define
声明的,但我们也可以用enum
例如
enum boolean{ NO, YES };
其中NO的值为0,第二个为1,以此类推。
调用时:
printf("%d", YES); /* 会输出1 */
再比如第二个例子,就可以理解为什么我说像数组了
enum escape { BELL = '\a', BACKSPACE = '\b', TAB = '\t', NEWLINE = '\n', VTAB = '\v', RETURN = '\r'};
感觉是不是很像,除了用的是中括号以外感觉确实没什么区别了,最后一个不要逗号。
如果只指定部分值,那么将会递增,如:
enum months { JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC };
比如这个,FEB值为2,MAR为3……
植入部分
如果您觉得文章不错,可以通过赞助支持我。
如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。