数据类型意义解析

关于C中的数据类型,个人的划分方法是 分为两类,一类是基本类型(地址类型也是基本类型的一种),也就是语言本身所提供的,编译器可以直接识别的。另一类就是组合类型(基本类型组合在一起)。

C语言给定数据类型的原因:

在用一个数据类型定义变量时,实际上也就是给定了三个信息,数据在内存中所占的字节数,数据在内存中的首地址,数据在内存中存储时的编码方式。对比弱类型语言,他们的编译器在保存这些数据的同时,必然会自动保存上面所说的三个信息。使用强数据类型的好处就是,一方面可以用编译器来检查数据,增加一定的安全性。也为编译器对之后的数据处理提供了很多的方便。

类型的详细说明:

1、整型 int、short、long  最初是为了节约内存空间而设计的,目前来看大部分情况下已经完全不必要了,定义变量时,最好是定义与机器字长一致的类型,不满足条件时,才考虑范围更大的类型。ps:补码存储

2、字符型:char 保存字符,不过其本质上是用ASCII 保存的整型。

3、浮点型:float、double对应实数类型,由于采用IEEE754 标准存储(组成原理笔记中有详细说明),所以在使用时应当注意精确度的问题,也就是说用==比较两个实数时完全没有意义的。

4、指针类型:也就是地址类型,32位系统中,指针类型数据固定占4个字节,它指向的是一个地址空间。其他的所有意义(比如所指向空间可以保存的数据的类型)都是编译器赋予它的,具体的编译器语法,在指针一节详细说明。

5、空类型:void,两个问题,一是空类型是什么? 二是 为什么要有空类型?

首先,空类型如果严格按照类型的定义来说,它并不是一种类型,而是编译器可以自动识别的一种特殊情况,比如,返回值类型位空,就表示没有返回值。那么编译器对函数的处理就达到了一种统一。空类型存在的原因是在一方面代表了“无”的状态,另一方面,作为空类型指针,它代表了“所有”的状态,即所有类型的指针都可以直接赋值给空类型指针。int *p1 = null; void * p = p1; // OK

6、数组类型:相同类型的多个数据的集合。对应的是同类型数据的批量处理问题。

7、结构类型:有关联的多个数据的集合。实际上它就是面向对象的雏形,也是数据库,数据结构的基础。

8、联合类型:主要还是内存空间不足的情况下的产物,多个变量用同一段存储空间存储。目前基本不会再使用。

9、枚举类型:本质上是一个int(或short)型变量,但是限制其取值范围。同样由编译器识别处理。

10、typedef在结构体应用的本质:

面向对象的语言接触得多了,经常会忘记c语言中结构体变量声明的特殊性,在这里总结回顾一下。

一、结构体在代码中的两种常见定义形式

       (1) 结构体类型定义 

      struct A

       {

        ...

        };

       定义{}中的结构体为一个名称是"A"的结构体。

       使用这种定义方式时,必须使用struct A xxx来声明变量,A xxx的声明形式在c语言中是不被支持的。

eg: 想要声明一个类型为A的结构体变量a

struct A

{

unsigned char ucZERO;

unsigned char ucRESERVED;

unsigned short usALERT;

};

A a;

 错误信息:

      

      (2)结构体变量定义

        struct

       {

        ...

        }A;

       以{}中的结构定义一个名称为"A"的结构体变量,A是结构体变量不是结构体类型。这种定义形式下的结构体被称为匿名结构体,是没办法被直接引用的。

二、typedef在结构体定义中的应用

        typedef是c语言关键字,作用是为一种数据类型定义一个新的名字。对于以上两种结构体定义形式,typedef都可以为其创建别名。

        (1) 为结构体A创建一个别名tagA   

​
      typedef struct A

          {

              ...                           

           }tagA;

​

        (2) 为匿名结构体创建一个别名tagA

           typedef struct

           {

                 ...                           

            }tagA;

          typedef在这里的应用解决了匿名结构体不能被再引用的问题。

 三、总结

        不管是以上那种方式的应用,在c语言中使用typedef帮助定义结构体,对于声明结构体变量,便可以直接使用tagA xxx(结构体名 对象名)的形式,而没必要带上struct关键词。实际项目C代码中,结构体的定义一般都使用了typedef,在大量使用结构体变量的场合,这样会省事很多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值