C语言 数据类型详细介绍

C 数据类型

在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。

C 中的类型可分为以下几种:

序号 类型与描述
1 基本类型:
它们是算术类型,包括两种类型:整数类型和浮点类型。
2 枚举类型:
它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量。
3 void 类型:
类型说明符 void 表明没有可用的值。
4 派生类型:
它们包括:指针类型、数组类型、结构类型、共用体类型和函数类型。

数组类型和结构类型统称为聚合类型。函数的类型指的是函数返回值的类型。在本章节接下来的部分我们将介绍基本类型,其他几种类型会在后边几个章节中进行讲解。

整数类型

下表列出了关于标准整数类型的存储大小和值范围的细节:

类型 存储大小 值范围
char 1 字节 -128 到 127 或 0 到 255
unsigned char 1 字节 0 到 255
signed char 1 字节 -128 到 127
int 2 或 4 字节 -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647
unsigned int 2 或 4 字节 0 到 65,535 或 0 到 4,294,967,295
short 2 字节 -32,768 到 32,767
unsigned short 2 字节 0 到 65,535
long 4 字节 -2,147,483,648 到 2,147,483,647
unsigned long 4 字节 0 到 4,294,967,295

注意,各种类型的存储大小与系统位数有关,但目前通用的以64位系统为主。

以下列出了32位系统与64位系统的存储大小的差别(windows 相同):

为了得到某个类型或某个变量在特定平台上的准确大小,您可以使用 sizeof 运算符。表达式 sizeof(type) 得到对象或类型的存储字节大小。下面的实例演示了获取 int 类型的大小:

#include <stdio.h>
#include <limits.h>

int main()
{
 printf("int 存储大小 : %lu \n", sizeof(int));

 return 0;
}

当您在 Linux 上编译并执行上面的程序时,它会产生下列结果:

int 存储大小 : 4

浮点类型

下表列出了关于标准浮点类型的存储大小、值范围和精度的细节:

类型 存储大小 值范围 精度
float 4 字节 1.2E-38 到 3.4E+38 6 位小数
double 8 字节 2.3E-308 到 1.7E+308 15 位小数
long double 16 字节 3.4E-4932 到 1.1E+4932 19 位小数

头文件 float.h 定义了宏,在程序中可以使用这些值和其他有关实数二进制表示的细节。下面的实例将输出浮点类型占用的存储空间以及它的范围值:

#include <stdio.h>
#include <float.h>

int main()
{
 printf("float 存储最大字节数 : %lu \n", sizeof(float));
 printf("float 最小值: %E\n", FLT_MIN );
 printf("float 最大值: %E\n", FLT_MAX );
 printf("精度值: %d\n", FLT_DIG );

 return 0;
}

当您在 Linux 上编译并执行上面的程序时,它会产生下列结果:

float 存储最大字节数 : 4
float 最小值: 1.175494E-38
float 最大值: 3.402823E+38
精度值: 6

void 类型

void 类型指定没有可用的值。它通常用于以下三种情况下:

序号 类型与描述
1 函数返回为空
C 中有各种函数都不返回值,或者您可以说它们返回空。不返回值的函数的返回类型为空。例如 void exit (int status);
2 函数参数为空
C 中有各种函数不接受任何参数。不带参数的函数可以接受一个 void。例如 int rand(void);
3 指针指向 void
类型为 void * 的指针代表对象的地址,而不是类型。例如,内存分配函数 void *malloc( size_t size ); 返回指向 void 的指针,可以转换为任何数据类型。

如果现在您还是无法完全理解 void 类型,不用太担心,在后续的章节中我们将会详细讲解这些概念。

以上就是对 C语言数据类型的资料整理,后续继续补充相关资料,希望能帮助开始学习 C语言的同学。

(0)

相关推荐

  • C语言菜鸟基础教程之数据类型

    C语言的数据类型有整型.浮点型(就是小数).字符.字符串.数组.结构体等.刚开始学的时候,不要一下子学太多.先学最基本的整型.浮点型和字符. 对于学习程序来说,最重要的是动手操作. 先编写程序: #include <stdio.h> int main() { int a = 1; printf("a = %d\n", a); float b = 2.2; printf("b = %f\n", b); char c = 'A'; printf("

  • 详解C语言中的char数据类型及其与int类型的转换

    C语言中的char变量 char是C/C++整型数据中比较古怪的一个,其它的如int/long/short等不指定signed/unsigned时都默认是signed.虽然char在标准中是unsigned(因为char类型提出的初衷是用来表示ascii码,ascii码的范围是0~127),但实际情况中究竟是signed还是unsigned取决于编译器. 可通过下面程序判断编译器的默认char类型: void char_type() { char c=0xFF; if(c==-1) printf

  • C语言数据类型转换实例代码

    数据类型转换就是将数据(变量.表达式的结果)从一种类型转换到另一种类型.例如,为了保存小数你可以将int类型的变量转换为double类型. 数据类型转换的一般格式为: (type_name) expression type_name为要转换到的数据类型,expression为表达式.例如: (float) a; //把a转换为实型 (int)(x+y); //把x+y的结果转换为整型 (float) 100; //将一个常量转换为实型 [示例]将整数转换为浮点数: #include <stdio

  • 浅谈C语言编程中的布尔bool数据类型

    我们知道在C++里有专门的bool类型,用来表示真或假.但是在C语言里没有这样的类型(至少我是一直这么认为的),表达式的值0为假,非0为真.所以条件判断语句( if(-).while(-) )非常灵活,甚至一个指针类型都可以是条件表达式. 为了使程序更清晰,我们常常会给出如下的宏定义: typedef int BOOL; #define TRUE 1 #define FALSE 0 这是最常见的写法,能被任何C语言编译器认可. 今天我在一段程序里看见这么一行 #include ,这个陌生的头文件

  • 深入解析C语言中常数的数据类型

    废话不多说,上代码 复制代码 代码如下: //编译环境:codeblocks+gcc#include <stdio.h>#include <stdint.h>int Fun(){    uint64_t y;    uint32_t x1, x2; //y = 3000 * 24000000 / 1000;//常数默认作为32位数据,临时运算结果也是32位,溢出错误    //y = (uint64_t)3000 * (uint64_t)24000000 / 1000;//常数强制

  • Go语言数据类型详细介绍

    目录 一.Go 语言两大数据类型 二.基础类型 三.复合类型 指针 四.数组(array) 五.切片(slice) 六.字典/映射(map) 七.通道(channel) 八.结构体(struct) 九.接口(interface) 十.错误(error) 一.Go 语言两大数据类型 Go 语言数据类型包含基础类型和复合类型两大类. 基础类型包括: 布尔类型 bool. 数值类型 int,int8,int16,int32,int64,float32,float64. uint8,uint16,uin

  • C语言 数据类型详细介绍

    C 数据类型 在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统.变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式. C 中的类型可分为以下几种: 序号 类型与描述 1 基本类型: 它们是算术类型,包括两种类型:整数类型和浮点类型. 2 枚举类型: 它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量. 3 void 类型: 类型说明符 void 表明没有可用的值. 4 派生类型: 它们包括:指针类型.数组类型.结构类型.共用体类型和函数类型.

  • C语言数组详细介绍

    目录 什么是数组 一维数组 二维数组 数组越界 数组名 结尾 什么是数组 数组(Array)是一种用来存储同一种类型的集合,是一种有序的线性结构表.并且数组元素的地址是连续的. 数组最大的优点就是支持随机访问,当想访问数组的某个数时,只需要找到数组的对应下标就可以直接找到该数组对应元素.但是数组也有相应的缺点,那就是数组的元素个数和数组空间大小在创建时就已经被固定死了,如果数组的空间没有使用完也会造成空间浪费,并且因为数组的地址是连续的,这本应该是一个优点的,但是这导致数组在进行删除或增加元素时

  • C语言 超详细介绍与实现线性表中的带头双向循环链表

    目录 一.本章重点 二.带头双向循环链表介绍 2.1什么是带头双向循环链表? 2.2最常用的两种链表结构 三.带头双向循环链表常用接口实现  3.1结构体创建 3.2带头双向循环链表的初始化  3.3创建新节点 3.4尾插 3.5打印链表 3.6头插 3.7尾删 3.8头删 3.9查找data(返回data的节点地址) 3.10在pos位置之前插入节点 3.11删除pos位置的节点 四.实现接口总结 五.在线oj训练与详解 一.本章重点 带头双向循环链表介绍 带头双向循环链表常用接口实现 实现接

  • C语言 超详细介绍与实现线性表中的无头单向非循环链表

    目录 一.本章重点 二.链表介绍 三.无头单向非循环链表常用接口实现 3.1动态申请一个节点 3.2单链表打印 3.3单链表尾插 3.4单链表的头插 3.5单链表的尾删 3.6单链表头删 3.7单链表查找 3.8单链表在pos位置之前插入x 3.9单链表删除pos位置的节点 四.在线oj训练 4.1移除链表元素(力扣) 4.2反转单链表(力扣) 一.本章重点 无头单向非循环链表介绍 无头单向非循环链表常用接口实现 在线oj训练 二.链表介绍 概念:链表是一种物理存储结构上非连续.非顺序的存储结构

  • Lua中的基本数据类型详细介绍

    基础介绍 Lua是一种动态类型的语言.在语言中没有类型定义的语法,每个值都带有其自身的类型信息.在Lua中有8中基本类型,分别是: 1.nil(空)类型 2.boolean(布尔)类型 3.number(数字)类型 4.string(字符串)类型 5.userdata(自定义类型) 6.function(函数)类型 7.thread(线程)类型 8.table(表)类型 以上是Lua中的8中基本类型,我们可以使用type函数,判断一个值得类型,type函数返回一个对应类型的字符串描述.例如: 复

  • C语言 运算符详细介绍及示例代码

    C 运算符 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号.C 语言内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 本章将逐一介绍算术运算符.关系运算符.逻辑运算符.位运算符.赋值运算符和其他运算符. 算术运算符 下表显示了 C 语言支持的所有算术运算符.假设变量 A 的值为 10,变量 B 的值为 20,则: 运算符 描述 实例 + 把两个操作数相加 A + B 将得到 30 - 从第一个操作数中减去第二个操作数 A

  • Python基本数据类型详细介绍

    1.空(None)表示该值是一个空对象,空值是Python里一个特殊的值,用None表示.None不能理解为0,因为0是有意义的,而None是一个特殊的空值.2.布尔类型(Boolean)在Python中,None.任何数值类型中的0.空字符串"".空元组().空列表[].空字典{}都被当作False,还有自定义类型,如果实现了__nonzero__()或__len__()方法且方法返回0或False,则其实例也被当作False,其他对象均为True布尔值和布尔代数的表示完全一致,一个

  • java数据类型与二进制详细介绍

    java数据类型与二进制详细介绍 在java中 Int 类型的变量占 4个字节 Long 类型的变量占8个字节 一个程序就是一个世界,变量是这个程序的基本单位. Java基本数据类型 1.        整数类型 2.        小数(浮点数)类型 3.        布尔类型 4.        字符类型 整数类型 整数类型可以表示一个整数,常用的整数类型有:byte,short,int,long Byte  一个字节  -128到127 注:0有两个表示0000 0000正零  1000

  • C语言中左移和右移运算符详细介绍

    C语言中左移和右移运算符详细介绍 左移运算符(<<) 左移运算符是用来将一个数的各二进制位左移若干位,移动的位数由右操作数指定(右操作数必须是非负值),其右边空出的位用0填补,高位左移溢出则舍弃该高位. 右移运算符(>>) 右移运算符是用来将一个数的各二进制位右移若干位,移动的位数由右操作数指定(右操作数必须是非负值),移到右端的低位被舍弃,对于无符号数,高位补0. 对于有符号数,某些机器将对左边空出的部分用符号位填补(即"算术移位"),而另一些机器则对左边空出

随机推荐