forum.jpg
C语言数据类型
在嵌入式Linux开发《C语言专题(一:不一样的hello world)》文章中展示了一个最简单同时又是经典的C代码例子-hello world.c,通过这个代码来对C语言有一个整体的认识。这篇文章主要写C语言中的基本数据类型。
基本数据类型有整型、字符型和浮点型。涉及到short、int、long、char、float、double、signed和unsigne这几个C语言中的关键字。
下面测试一下基本类型在内存中所占的内存空间大小:
#include <stdio.h>
  • int main(int argc, char** argv)
  • {
  • printf(" int长度:%d\n short长度:%d\n long长度:%d\n char长度:%d\n float长度:%d\n double长度:%d\n ",sizeof(int),sizeof(short),sizeof(long),
  • sizeof(char),sizeof(float),sizeof(double));
  • return 0;
  • }
  • 复制代码
    forum.jpg
    显示基本数据类型长度
    从中可以看到int和long占4个字节,short占2个字节,char占一个字节,float占4个字节,double占8个字节。注意这是在32位linux系统中的结果。为什么要测试类型的长度呢?一方面是为以后定义变量做出合适的选择,不要让变量的值超出了变量类型的范围;另一方面是面试,有些题目直接问int类型所占的内存空间,不要一口咬定是4个字节,因为在不同的系统中int的长度真不一样,自己可以试试,
    上面的代码还有需要注意的地方:printf()函数中可以输出变量的值,类似于printf("a=%d b=%d",a,b);直接将双引号中的2个%d分别替换成变量a和b的值(前提定义变量a和b为整型:int a=10,b=10;)sizeof是关键字不是函数,它可以用来计算类型所占的存储空间,比如我们要向内存中申请20个int类型的空间,不要直接写上malloc(4*20);而应该写成malloc(sizeof(int)*20) 因为不同的系统中int类型长度未必是4。还有一种用法就是给你一个一维数组名array,计算出此数组中有几个元素?答案是:sizeof(array)/sizeof(array[0]) 这里先提一下数组,后续详细讲解。
    (1)整型:整型中有短整型(short) 整型 (int) 长整型(long) 都分为有符号和无符号两种版本。类似于数学中的整数。规定长整型至少和整型一样长,而整型至少和短整型一样长。C语言的整型与数学中的整数一样,用来表示整型值。整型有正数、也有负数对应C语言中的有符号整型数。整型变量的定义为:int a;或者定义并初始化int a=0; int可以换为short、long或者加上unsigned和signed.考虑到头条中直接放代码容易乱,我决定放图片,如下图显示:注意看代码和注释,自己测试测试
    forum.jpg
    测试整型代码
    forum.jpg
    整型结果
    %d就是普通的输出;%md 将数字按宽度为m,采用右对齐方式输出,若数据位数不到m位,则左边补空格,大于或者等于m位正常输出;%.md与 %0md一样,采用右对齐方式输出,若数据位数不到m位,则左边补0,大于或者等于m位正常输出;
    %d及其变形的以上用法在格式化时间以及在屏幕的规定位置显示数据的时候比较有用。
    (2)字符型:字符型对应ASCII字符。ASCII字符是一种编码,就是用数字编码来表示一个符号。字符的本质还是整形,所以可以和整型进行算数运算,只是这些整形数被用来表示为一些字符的ASCII编码值,所以称作字符型。字符型一般用一个字节:即8位二进制表示。测试代码和结果如下图所示:
    forum.jpg
    测试字符型代码
    forum.jpg
    字符型结果
    (3)浮点型:浮点型有单精度(float)和双精度(double) 类似于3.1415926和5.5*10^20这样的数是可以用浮点类型存储的。类似于数学中的小数。float和double的 使用方式相同,范围和精度不同。float表示的范围小,精度低;而double表示范围大,精度高,float以%f方式输出,double以%lf方式输出。测试代码和结果如下图所示:
    forum.jpg
    测试浮点型代码
    最后给出基本类型的取值范围:常见的char和short最好能记住
    forum.jpg
    基本类型取值范围
    其它的数据类型(数组、结构体、共用体、枚举、指针)相对比较复杂,在后续会有相应文章详细讲解。