C语言有丰富的数据类型,因此它很适合用来编写数据库,如DB2、Oracle都是C语言写的。

C语言的数据类型大致可以分为下图中的几类:

一、变量

跟其他语言一样,C语言中用变量来存储计算过程使用的值,任何变量都必须先定义类型再使用。为什么一定要先定义呢?因为变量的类型决定了变量占用的存储空间,所以定义变量类型,就是为了给该变量分配适当的存储空间,以便存放数据。比如你是char类型,我就只给你分配1个字节就够了,没必要分配2个字节、3个字节乃至更多的存储空间。

下面的表格描述了在16位编译器环境下,基本数据类型所占用的存储空间,了解这些细节,对以后学习指针和数组时是很有帮助的

需要注意的是:

1.局部变量的使用跟Java稍微有点不一样

1> 在Java中,你声明了一个局部变量后,如果没有经过初始化赋值就使用该变量,编译器直接报错

第9行报错了,因为变量a没有初始化

2> 在C语言中,你声明看一个局部变量后,没有经过初始化赋值是可以使用的

  1. 1 #include <stdio.h>
  2. 2
  3. 3 int main()
  4. 4 {
  5. 5 int b;
  6. 6 printf("%d", b);
  7. 7 return 0;
  8. 8 }

但这是很危险的,不建议这样做。大多数人应该觉得变量b打印出来应该是0,其实不是。因为系统会随意给变量b赋值,得到的是垃圾数据。

上述代码的打印结果是:因此,局部变量还是必须先进行初始化赋值,然后再使用,这样才是最安全的做法。

* 如果是全局的int类型变量,系统会默认赋值为0

2.char的取值范围是:ASCII码字符 或者 -128~127的整数

于是,使用char存储大写字母A有2种赋值方式:

  1. // 方式1
  2. char c = 'A';
  3.  
  4. // 方式2
  5. char c = 65;

上面两种方式是等效的,因为大写字母A的ASCII码值刚好为65。点击查看ASCII码表的所有值

3.char只能存储一个字符

汉字或者字符串需要用字符数组来存储,因为一个汉字占了2个字符,一个字符串是由一个或者多个字符组成的。

因此,下面的写法都是错误的:

  1. char c1 = '我';
  2. char c2 = '123';
  3. char c3 = "123";

二、类型修饰符

我们还可以在基本数据类型的前面加一些修饰符,也有人称之为限定符,一样的意思。

有以下4种类型修饰符:

  • short  短型
  • long  长型
  • signed  有符号型
  • unsigned  无符号型

1.用法演示

这些修饰符最常是用来修饰int类型(可以省略int)

  1. 1 // 下面两种写法是等价的
  2. 2 short int s1 = 1;
  3. 3 short s2 = 1;
  4. 4
  5. 5 // 下面两种写法是等价的
  6. 6 long int l1 = 2;
  7. 7 long l2 = 2;
  8. 8
  9. 9 // 可以连续使用2个long
  10. 10 long long ll = 10;
  11. 11
  12. 12 // 下面两种写法是等价的
  13. 13 signed int si1 = 3;
  14. 14 signed si2 = 3;
  15. 15
  16. 16 // 下面两种写法是等价的
  17. 17 unsigned int us1 = 4;
  18. 18 unsigned us2 = 4;
  19. 19
  20. 20 // 也可以同时使用2种修饰符
  21. 21 signed short int ss = 5;
  22. 22 unsigned long int ul = 5;

2.short和long

1> short和long可以提供不同长度的整型数,也就是可以改变整型数的取值范围,比如short的取值范围是-32768~32767,long的取值范围就是-2147483648~2147483647

2> 当然,数据的存储长度也会跟着变化。比如,在64位编译器环境下,short占2个字节(16位),int占4个字节(32位),long占8个字节(64位)。世界上的编译器林林总总,不同编译器环境下,取值范围和占用的长度是不一样的,不过幸运的是,ANSI \ ISO制定了以下规则:

* short跟int至少为16位(2字节)

* long至少为32位(4字节)

* short的长度不能大于int,int的长度不能大于long

* char一定为为8位(1字节),毕竟char是我们编程能用的最小数据类型

3.signed和unsigned

1> signed代表有符号,包括正数、负数和0;unsigned代表无符号,只包括正数和0。比如,signed的取值范围是-32768~32767,那么unsigned的取值范围是0~65535,当然,不同的编译器有不同的取值范围

2> 其实,signed和unsigned的区别就是它们的最高位是否要当做符号位,并不会像short和long那样改变数据的长度,即所占的字节数,

4.signed、unsigned也可以修饰char,long还可以修饰double

  1. unsigned char c1 = 10;
  2. signed char c2 = -10;
  3.  
  4. long double d1 = 12.0;

三、不同编译器环境下基本数据类型的存储长度

红色的代表常用的数据类型

【C语言】06-基本数据类型的更多相关文章

  1. C语言-06复杂数据类型-04 结构体

    结构体的说明(构造类型) 数组:只能由多个相同类型的数据构成 结构体:可以由多个不同类型的数据构成 ,结构体的类型是不存在的,自己定义 int main() { // 1.定义结构体类型 定义类型的时 ...

  2. C语言-06复杂数据类型-03指针

    指针变量的定义 变量类型 *变量名; #include <stdio.h> int main() { // 指针就一个作用:能够根据一个地址值,访问对应的存储空间 // 指针变量p前面的i ...

  3. C语言-06复杂数据类型-02字符串

    #include <stdio.h> int main() { //char name[] = {'i', 't', 'c', 'H', 's', 't', '\0'}; char nam ...

  4. C语言-06复杂数据类型-01数组

    01-数组 #include <stdio.h> int main() { // 使用注意 // 都是正确写法 //int ages[5] = {10 , 11, 12, 67, 56}; ...

  5. C语言的基本数据类型长度

    PS:以下内容是在Xcode的编辑器64位环境下的测试结果,网上有关于64位和32位各数据类型存在的差异,请自行online search. main.m #import <Foundation ...

  6. Go 语言的基本数据类型

    Go 语言的基本数据类型 0)变量声明 var 变量名字 类型 = 表达式 例: 其中“类型”或“= 表达式”两个部分可以省略其中的一个. 1)根据初始化表达式来推导类型信息 2)默认值初始化为0. ...

  7. Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器

    Android For JNI(二)--C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器 当我们把Hello World写完之后,我们就可以迈入C的大门了,今天就来讲讲基本的一些数据类型 ...

  8. Go语言基础之数据类型

    Go语言基础之数据类型 Go语言中有丰富的数据类型,除了基本的整型.浮点型.布尔型.字符串外,还有数组.切片.结构体.函数.map.通道(channel)等.Go 语言的基本类型和其他语言大同小异. ...

  9. [日常] Go语言圣经--复合数据类型,数组习题

    go语言圣经-复合数据类型 1.以不同的方式组合基本类型可以构造出来的复合数据类型 2.四种类型——数组.slice.map和结构体 3.数组是由同构的元素组成——每个数组元素都是完全相同的类型——结 ...

  10. C语言复习————基本数据类型、运算符和表达式

    数据类型/运算符/表达式 主要分两部分介绍,第一部分介绍常用的数据类型,例如:常量和变量/整型/实型/字符型:第二部分介绍算数运算符和算数表达式以及赋值运算符和逗号运算符. 一. 常用的数据类型 1. ...

随机推荐

  1. Object-c 控制语句

    控制语句: 分支语句   if-else  有控制机制    switch 循环语句   while    do-while  for 跳转语句   break,continue,goto

  2. Cannot change version of project facet Dynamic web module to 2.5

    在工程目录下有一个.settings文件夹,打开org.eclipse.wst.common.project.facet.core.xml做如下修改:<installed facet=" ...

  3. Android 启动画面

    如果你的程序初始化时间过长,那么在初始化之前,程序会现实一个空白的activity页,十分难看. 添加一个启动画面的方法就是为响应的activity加入自定义的Theme,并在theme中设定 and ...

  4. hdu 1160 FatMouse's Speed 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1160 题目意思:给出一堆老鼠,假设有 n 只(输入n条信息后Ctrl+Z).每只老鼠有对应的weigh ...

  5. Material Design综合实例

    背景知识 drawlayout的使用 recycleView的使用 CardView的使用 一些开源动画库的使用 ImageView的scaleType属性与adjustViewBounds属性 ,参 ...

  6. grep -w

    [root@86 ~]# mysqladmin -uroot -p123456 -S /tmp/mysql.sock extended-status|grep -w "Com_update& ...

  7. cut mysqladmin

    [root@86 ~]# mysqladmin -uroot -p123456 -S /tmp/mysql.sock status Uptime: 112403 Threads: 17 Questio ...

  8. Linux中获取当前程序的绝对路径

    代码如下: char current_absolut_path[MAX_SIZE] = ""; memset(current_absolut_path,,MAX_SIZE); // ...

  9. OAuth2 通用组件源码下载(支持新浪微博、QQ、淘宝)(转载)

    转载地址:http://www.cyqdata.com/download/article-detail-54302 OAuth2 社区通用组件说明:   源码为C#(.NET)写成,目前支持新浪微博. ...

  10. Java Hour 28 HashSet

    有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. Hour 28 HashSet 为查找而生 LinkedList查找效率低下, ...