请问C语言中定义数据类型的有哪些词啊,应该在什么情况下用到?
xlzhTA0082
当需要为变量、常量以及函数定义并分配存储空间时,要定义数据类型.C/C++ 数据类型C语言包含5个基本数据类型: void, integer, float, double, 和 char. 类型 描述 void 空类型 int 整型 float 浮点类型 double 双精度浮点类型 char 字符类型 C++ 定义了另外两个基本数据类型: bool 和 wchar_t. 类型 描述 bool 布尔类型, 值为true 或 false wchar_t 宽字符类型 类型修饰符一些基本数据类型能够被 signed, unsigned, short, 和 long 修饰. 当类型修饰符单独使用的时候, 默认的类型是 int. 下表是所有可能出现的数据类型: bool char unsigned char signed char int unsigned int signed int short int unsigned short int signed short int long int signed long int unsigned long int float double long double wchar_t 类型大小和表示范围基本数据类型的大小以及能够表示的数据范围是与编译器和硬件平台有关的. "cfloat" (或者 "float.h") 头文件往往定义了基本数据类型能够表示的数据的最大值和最小值. 你也可以使用 sizeof 来获得类型的大小(字节数) . 然而, 很多平台使用了一些数据类型的标准大小,如. int 和 float 通常占用 32位, char 占用 8位, double 通常占用64位. bools 通常以 8位 来实现.
???????double??long double??float??signed int??????????????????????????
double和float用于定义带小数部分的数据类型。
double和long double都是ANSI C标准的浮点数。但ANSI C并未规定long double的确切精度。所以对于不同平台可能有不同的实现。有的是8字节,有的是10字节,有的是12字节或更多。一般来说long double的精度要高于double, 至少相等,就像int和long int一样。但同一平台也可能不一样,比如MS自己的C/C++/VC++就不一样。
int就是signed int。
为您推荐:
其他类似问题
扫描下载二维码&&/&&&&/&&&&/&&
C 语言包含的数据类型如下图所示:
一、数据类型与&模子&
short、int、long、char、float、double 这六个关键字代表C 语言里的六种基本数据类型。
怎么去理解它们呢? 举个例子:见过藕煤球的那个东西吧?(没见过?煤球总见过吧)。那个东西叫藕煤器,拿着它在和好的煤堆里这么一咔,一个煤球出来了。半径12cm,12 个孔。不同型号的藕煤器咔出来的煤球大小不一样,孔数也不一样。这个藕煤器其实就是个模子。
现在我们联想一下,short、int、long、char、float、double 这六个东东是不是很像不同类型的藕煤器啊?拿着它们在内存上咔咔咔,不同大小的内存就分配好了,当然别忘了给它们取个好听的名字。
在32 位的系统上short 咔出来的内存大小是2 个byte;
int 咔出来的内存大小是4 个byte;
long 咔出来的内存大小是4 个byte;
float 咔出来的内存大小是4 个byte;
double 咔出来的内存大小是8 个byte;
char 咔出来的内存大小是1 个byte。
(注意这里指一般情况,可能不同的平台还会有所不同,具体平台可以用sizeof 关键字测试一下)
很简单吧?咔咔咔很爽吧?是很简单,也确实很爽,但问题就是你咔出来这么多内存块,你总不能给他取名字叫做x1,x2,x3,x4,x5&或者长江1 号,长江2 号&吧。它们长得这么像(不是你家的老大,老二,老三&),过一阵子你就会忘了到底哪个名字和哪个内存块匹配了(到底谁嫁给谁了啊?^_^)。所以呢,给他们取一个好的名字绝对重要。下面我们就来研究研究取什么样的名字好。
二、变量的命名规则
1、命名应当直观且可以拼读,可望文知意,便于记忆和阅读。
标识符最好采用英文单词或其组合,不允许使用拼音。程序中的英文单词一般不要太复杂,用词应当准确。
2、命名的长度应当符合&min-length && max-information&原则。
C 是一种简洁的语言, 命名也应该是简洁的。例如变量名MaxVal 就比MaxValueUntilOverflow 好用。标识符的长度一般不要过长,较长的单词可通过去掉&元音&形成缩写。
另外,英文词尽量不缩写,特别是非常用专业名词,如果有缩写,在同一系统中对同一单词必须使用相同的表示法,并且注明其意思。
3、当标识符由多个词组成时,每个词的第一个字母大写,其余全部小写。比如:
& &int CurrentVal;
这样的名字看起来比较清晰,远比一长串字符好得多。
4、尽量避免名字中出现数字编号,如Value1,Value2 等,除非逻辑上的确需要编号。比如驱动开发时为管脚命名,非编号名字反而不好。
初学者总是喜欢用带编号的变量名或函数名,这样子看上去很简单方便,但其实是一颗颗定时炸弹。这个习惯初学者一定要改过来。
5、对在多个文件之间共同使用的全局变量或函数要加范围限定符(建议使用模块名(缩写)作为范围限定符)。
(GUI_ ,etc)标识符的命名规则:
6、标识符名分为两部分:规范标识符前缀(后缀) + 含义标识。非全局变量可以不用使用范围限定符前缀。
7、作用域前缀命名规则。
8、数据类型前缀命名规则。
9、含义标识命名规则,变量命名使用名词性词组,函数命名使用动词性词组。例如:
变量含义标识符构成:目标词+ 动词(的过去分词)+ [状语] + [目的地];
函数含义标识符构成:动词(一般现时)+目标词+[状语]+[目的地];
10、程序中不得出现仅靠大小写区分的相似的标识符。例如:
& &int x, X; 变量x 与X 容易混淆
& &void foo(int x); 函数foo 与FOO 容易混淆
& &void FOO(float x);
这里还有一个要特别注意的就是1(数字1)和l(小写字母l)之间,0(数字0)和o(小写字母o)之间的区别。这两对真是很难区分的,我曾经的一个同事就被这个问题折腾了一次。
11、一个函数名禁止被用于其它之处。例如:
#include &c_standards.h&
void foo(int p_1)
& &int x = p_1;
void static_p(void)
& &int foo = 1u;
12、所有宏定义、枚举常数、只读变量全用大写字母命名,用下划线分割单词。例如:
const int MAX_LENGTH = 100; //这不是常量,而是一个只读变量,具体请往后看
& define FILE_PATH &/usr/tmp&
13、考虑到习惯性问题,局部变量中可采用通用的命名方式,仅限于n、i、j 等作为循环变量使用。
一定不要写出如下这样的代码:
一般来说习惯上用n,m,i,j,k 等表示int 类型的变量;c,ch 等表示字符类型变量;a 等表示数组;p 等表示指针。当然这仅仅是一般习惯,除了i,j,k 等可以用来表示循环变量外,别的字符变量名尽量不要使用。
14、定义变量的同时千万千万别忘了初始化。定义变量时编译器并不一定清空了这块内存,它的值可能是无效的数据。这个问题在内存管理那章有非常详细的讨论,请参看。
15、不同类型数据之间的运算要注意精度扩展问题,一般低精度数据将向高精度数据扩展。
推荐文章 TOP10共有421位成员 人气指数 - 最新排名 -
【话题】读取多种数据类型的二进制文件及其数据的访问
17:28:25 来自:edking 浏览数:69次
要读取某种二进制文件,该文件文件头包含有该文件数据类型等信息(int,float),数据读取后需要对数据进行均值、绘制直方图等操作,现在的问题是读取后的数据应该以何种方式保存,数据的访问怎样才能更有效率(数据量有可能非常大)?
现在我使用的方法是使用类进行封装,数据读到类中一个union{f float}数组中,每次访问都要确定数据类型才决定调用union中的哪个类型,这样写起来代码非常冗长烦复,请问大家有什么方案能改进?
suyoutian回复于07日22点19分
钱杉杉回复于08日09点33分
yjy8830609回复于08日15点18分
问题是读取文件前并不确定数据是int或者float甚至是double,那么数据应该以怎样的方式储存?即便使用void*储存,那么在数据访问的函数中就需要进行类型转换,写出的代码就变得非常丑陋!
drliang1回复于08日21点44分
如果不知道类型怎么读出来呢?int与double的位数都不一样。
除非文件中的数据是以特定的格式排列的(例如:每两个数字之间是由空格分开的),这样的话,用double储存不就行了?
如果数据是连续的二进制代码,那就要知道数据类型才知道一次读取多少个0/1。
你不是说“该文件文件头包含有该文件数据类型等信息”么?怎么又说不确定数据类型了呢?
betiyo回复于09日10点00分
bjwjxy2回复于09日17点07分
关键还是看你有些什么操作。比如,读出数据,放入了缓冲,然后是些什么操作呢?
有求平均,这个求平均是混合了不同数据类型的吗?
那你简单点,读入的时候全转 double 不好吗?
wanxinldd回复于10日07点01分
章志航回复于10日15点37分
需要执行的操作有很多,例如把数据绘制直方图、点图,根据某些条件筛选数据并求该条件下符合条件数据的均数,标准差标准误等,由于数据量可能会比较大,而且涉及绘图,所以数据访问比较频繁,对效率的考虑不得不慎重。
转到高精度的数据也考虑过,确实这个方案是最简单的,可能我对效率和资源占用太执着了。但我想一些数据库文件的读取应该也是类似吧,字段的类型在读取文件后才能确定,效率对数据库也是非常重要的,数据库是怎样做的呢?
wangwandi回复于11日06点33分
文件头有数据类型的信息以及数据段的起始地址(象bmp类型的文件,这应该是很多文件类型的储存格式吧),读取了文件头通过数据偏移读取数据,因为数据是二进制保存,故不需要考虑间隔符。就例如文件某一数据二进制值为0011111,如果文件头定义为int,那该值便是31,若是float那便是其它值了。
虽然文件说明类型可能为int,float,double,但我先不想考虑64位的数据,现在我用
union VAL32{
保存32位数据,在访问数据时先确认数据类型,然后才用相应方法访问数据。如
v.i// 按照int数据访问
v.f// 按照float数据访问
求这些数据平均值的函数就非常丑陋了,当然另一种方法也可以使用cast进行类型转换,但结果也好不了多少。
biscuit回复于11日16点22分
谢谢yutaooo的提点,确实也有一部分操作是使用混合运算的,但是在数值方法上如均数标准差等函数都是单一类型的运算,我也知道需要作出某些取舍,因思及与数据库的运作有些许相似,故想籍此拓展一下思路而已。
ypl67回复于12日09点04分
数据库也是需要一个叫元数据的部分。类似于你的文件头。
如果,你始终是要进行混合数据的计算,那么显然转成 double 是没有时间上的性能损失的。并且,相比较每次及时转类型,无论从代码的复杂度上,还是时间效率上都有优势,空间上,略有损失。但我想,绝大多数情况下,可以忽略。
那么,既然你还在犹豫,我想很可能是你直觉上觉得不使用这样的方案更合适。再想想,到底什么什么因素呢?
C/C++中, float + int 首先要转换成 float + float 的。
zhang8521221回复于12日20点47分
根据文件头,可以确定,要么剩余数据全是float,要么全是int是这样吗?
靓仔鼠回复于13日15点26分
“非常”两个字用得严重了。
每个文件调用一次不算麻烦。
C语言探索的其他话题...
热门脚本语言: