C 语言数据类型有以下几类。
基本类型:
- 整数类型
- 小数类型
派生类型:
- 指针类型
- 数组类型
- 结构类型
- 共用体类型
枚举类型
空类型
数组
数组 Arrray 就是一些具有相同类型的数据的集合,这些数据在内存中依次挨着存放,彼此之间没有缝隙。
C 语言数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
数组的定义方式:dataType arrayName[length];
dataType 为数据类型,arrayName 为数组名称,length 为数组长度。
数组的初始化并且给前面的元素赋值:int a[10]={12, 19, 22 , 993, 344};
当赋值元素少于数组总体元素的时候,剩余的元素自动初始化为 0。
如果给全部元素赋值,那么在定义数组时可以不给出数组的长度。
二维数组初始化和赋值:
int a[5][3]={ {80,75,92}, {61,65,71}, {59,63,70}, {85,87,90}, {76,77,85} };
int a[5][3]={80, 75, 92, 61, 65, 71, 59, 63, 70, 85, 87, 90, 76, 77, 85};
用来存放字符的数组称为字符数组,字符数组实际上是一系列字符的集合,也就是字符串 String。在 C 语言中,没有专门的字符串变量,没有 string 类型,通常就用一个字符数组来存放一个字符串。例如:
char str[] = {"c.biancheng.net"};
char str[] = "c.biancheng.net";
在 C 语言中,字符串总是以 作为结尾,所以 也被称为字符串结束标志,或者字符串结束符。
由双引号 " " 包围的字符串会自动在末尾添加 。例如,"abc123" 从表面看起来只包含了 6 个字符串,其实不然,C 语言会在最后隐式地添加一个 。所以,字符数组的长度至少要比字符串的长度大 1。
指针
内存中字节的编号称为地址 Address 或 指针 Pointer。地址从 0 开始依次增加,对于 32 位环境,程序能够使用的内存为 4GB, 最小地址为 0,最大的地址为 0XFFFFFFFF。
数据和代码都以二进制的形式存储在内存中,计算机无法从格式上区分某块内存到底存储的是数据还是代码。当程序被加载到内存后,操作系统会给不同的内存块指定不同的权限,拥有读取和执行权限的内存块就是代码,而拥有读取和写入权限(也可能是有读取权限)的内存块就是数据。
数据在内存中的地址也称为指针。存放指针的变量称为指针变量。定义指针变量与定义普通变量非常类似,不过要在变量名前面加星号,格式为:datatype *name;
定义指针变量时必须带 *,给指针变量赋值时不能带 *
指针变量存储了数据的地址,通过指针变量能够获得该地址上的数据,格式为:*pointer; 这里的 * 称为指针运算符。
结构体
结构体用来存放一组不同类型的数据。类似于 Java 中的类。结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员 Member。例如:
struct stu { char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在学习小组 float score; //成绩 };
结构体变量,指向结构体的变量。例如:struct stu stu1, stu2;
共用体
和结构体非常类似的语法。共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
枚举
枚举类型的定义形式为:
enum week{ Mon = 1, Tues = 2, Wed = 3, Thurs = 4, Fri = 5, Sat = 6, Sun = 7 };
用法和 Java 中的枚举类似。
INSERT