c语言复习之数据类型

c语言基本数据类型简介:
c语言数据类型基本可分为四部分:

一.整型:包括字符(char),短整型(short),整型(int)和长整型(long)
这里写图片描述
1,整型字面值
字面值是字面值常量的缩写,指定了其自身的值,并且不允许发生改变。比如说常量(声明为const的变量),在初始化后便不能改变其值。
当一个程序内出现整型字面值时,它属于哪一种整型值取决于其后添加的后缀:
eg:在整数字面值后面添加L或l(这是小写字母L),则这个整数会解释为long整型值,字符U或u会把数值指定为unsigned整型值,若两种字符各添加一个,那么就被解释为unsigned long整型值。
在源代码中,表示整型字面值的方法有很多,最自然的方法是十进制整型值,十进制整型字面值可能是int,long或unsigned long。整数也可以用八进制来表示,只要在数值前面加0就行,整数还可以用十六进制表示,只要在数值前面加0x就行。
最后,如果一个多字符字节常量的前面有一个L,那么它就是宽字符常量。
2.枚举类型
枚举类型就是指它的值为符号常量而不是字面值的类型。
例如:
enum weekday{sun,mon,tue,wed,thu,fri,sat};
定义了一个枚举类型名 enum weekday,然后定义变量为该枚举类型。例如:
enum weekday day;
当然,也可以直接定义枚举类型变量。例如:
enum weekday{sun,mon,tue,wed,thu,fri,sat} day;
其中,sum,mon,…,sat 等称为枚举元素或枚举常量,它们是用户定义的标识符。
需要说明的有以下几点。
① 枚举元素不是变量,而是常数,因此枚举元素又称为枚举常量。因为是常量,所以不能对枚举元素进行赋值。
② 枚举元素作为常量,它们是有值的,C 语言在编译时按定义的顺序使它们的值为,1,2,…。
在上面的说明中,sun 的值为 0,mon 的值为 1,…sat 的值为 6,如果有赋值语句
day=mon;
则 day 变量的值为 1。当然,这个变量值是可以输出的。例如:
printf (“%d”,day);
将输出整数 1。
如果在定义枚举类型时指定元素的值,也可以改变枚举元素的值。例如:
enum weekday{sun=7,mon=1,tue,wed,thu,fri,sat}day;
这时,sun 为 7,mon 为 1,以后元素顺次加 1,所以 sat 就是 6 了。
③ 枚举值可以用来作判断。例如:
if (day==mon) {…}
if (day>mon) {…}
枚举值的比较规则是:按其在说明时的顺序号比较,如果说明时没有人为指定,则第一个枚举元素的值认作 0。例如,mon>sun,sat>fri。
④ 一个整数不能直接赋给一个枚举变量,必须强制进行类型转换才能赋值。例如:
day=(enum weekday)2;
这个赋值的意思是,将顺序号为 2 的枚举元素赋给 day,相当于workday=tue;
二.浮点型
浮点数家族包括float,double和long double。这些类型分别提供单精度,双精度,和在某些支持扩展精度的机器上提供扩展精度。ANSI标准规定,long double 至少和double一样长,double至少和float一样长。标准同时规定了一个最小范围:所有浮点数至少能容纳10的-37次方到10的37次方中间的任意一个值。
浮点数字面值一般写为十进制的形式,它必须有一个小数点或一个指数,也可以两者都有。例如:3.1415,.5,5.,10E2等。
浮点字面值在缺省的情况下都默认为double类型,除非在它后面加一个L或l表示它为long double 类型,或跟一个F或f表示它为float类型。
三.指针
很多c语言初学者对于指针特别头疼,我们这样理解一下。就像一条街道上的房子由它们的门牌号码标识一样,指针其实就是地址的另外一个名字罢了。指针变量就是一个值为另外一个或一些内存地址的变量。
指针就是通过地址而不是通过名字来访问才会常常被混淆。但是你想想现实中的例子,这就好比有人把一座房子的门牌号和里边的家具什么弄混,这就有点滑稽了。指针就是每一个位置包含一个值,这个位置的地址是独立且显著不同的。
1.指针常量
指针常量和非指针常量在本质上是不同的,因为编译器负责把变量赋值给计算机内存中的位置,程序员实现无法知道某个特定的变量将存储在内存中的那个位置,事实上,当一个函数每次被调用时,它的自动变量(局部变量)可能每次分配的内存位置都不一样。因此,把指针常量,表现为字面值的形式几乎没有意义,所以c语言内部并没有特地设定这个概念。
2.字符串常量
大家应该知道c语言中没有字符串类型,不过c语言提供了字符串常量。事实上,c语言存在字符串概念,它是以NUL字节结尾的零个或多个字符,NUL是用来终止字符串的,所以字符串中不能含有NUL字符。
字符串常量的书写是用一对双引号来包围一串字符,例如:
“HELLO”,“\aworld”等
注意:
在字符串常量的存储形式中,所有字符和NUL结束字符都存储于内存的某个位置,具有相同值的不同字符串常量在内存中是分开储存的,因此,许多编译器都允许字符串常量被改变。ANSI C则声明如果对一个字符串常量进行修改,其效果是未定义的,它也允许编译器把一个字符串常量存储于同一位置,即使他在程序中多次出现,这也使得修改字符串常量变得非常危险,因为对一个常量进行修改可能殃及到其他字符串常量。因此,许多ANSI编译器不允许修改字符串变量,或者提供编译时选项,让你自行选择是否允许修改字符串常量,在实践中,请尽量避免这样做,如果你需要修改字符串常量,请把它存储于数组中。
之所以把字符串和指针放在一起讨论,其原因是在程序中使用字符串常量会生成一个“指向字符的常量指针”。
四.聚合类型
聚合类型包括数组,结构体等,这些板块后面会具体讨论。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值