【C语言】 数据类型的分类

数据介绍

程序 = 数据 + 算法。

数据,能表示事物某种属性的数值,都称为数据。

数据的分类

分为常量数据和变量数据。

常量数据:指数值不会发生更改的数据。

比如:1,2,3.14,'+'。

不能对常量空间写入新的数值,因此常量数据不能出现在赋值号的左侧。

变量数据:指数值允许发生更改的数据。

比如:在执行了int a; double b; char c;操作后,a,b,c都是变量。

c 复制代码
int a; // 定义整型变量a
a = 5; // 正确
// 5 = 2 + 3;  //错误

在C语言中, = 符号表示赋值, == 符号表示等于

数据类型的作用

1.无论是常量数据还是变量数据,操作时都需要考虑其数据类型。

2.数据类型会规定数据的空间占用情况、空间存储情况、可表达的数据范围和可做的计算操作。

比如:C语言中有一个求余数的运算符%

c 复制代码
10 %3 == 1

这个运算符要求两边操作数必须为整数。

存储单位

计算机中常用的存储单位是 字节(Byte),1Byte == 8bit

计算机中最基本的存储单位是 比特(bit),一比特数据又称为一位数据,此处的一位是二进制中一位,因此1bit数据的数值只能是0或1,共计表示2种数值。

若某个数据需要占用计算机的n bit的存储空间,那么该数据的可能数值共计2的n次方种。

还有一种存储单位是字(Word),一般是4Byte,和开发环境的位数有关!

其他常见的存储单位:

1KB == 1024 Byte == 2的10次方 Byte

1MB == 1024 KB == 2的20次方 Byte

1GB == 1024 MB == 2的30次方 Byte

1TB == 1024 GB == 2的40次方 Byte

数据类型的分类

在C语言中,数据类型系统非常清晰且有层次。下面我将详细阐述C语言数据类型的分类:

基本数据类型(Primary Data Types)

整型(Integer Types)

c 复制代码
char        // 字符型,通常1字节
short       // 短整型,通常2字节
int         // 整型,通常4字节
long        // 长整型,通常4或8字节
long long   // 长长整型,通常8字节

// 示例
int age = 25;
char grade = 'A';
long population = 7800000000L;

浮点型(Floating-point Types)

c 复制代码
float        // 单精度浮点型,通常4字节
double       // 双精度浮点型,通常8字节
long double  // 长双精度浮点型,通常8-16字节

// 示例
float price = 99.99f;
double distance = 384400.5;
long double precise_value = 3.141592653589793238L;

字符型(Character Type)

c 复制代码
char        // 存储单个字符,实际存储的是ASCII码值

// 示例
char ch = 'X';
char newline = '\n';

构造数据类型(Derived Data Types)

数组(Array)

c 复制代码
// 一维数组
int numbers[5] = {1, 2, 3, 4, 5};
float temperatures[7];

// 二维数组
int matrix[3][3] = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

// 字符数组(字符串)
char name[20] = "John Doe";

结构体(Structure)

c 复制代码
// 定义结构体
struct Student {
    char name[50];
    int age;
    float gpa;
    char id[10];
};

// 使用结构体
struct Student s1;
strcpy(s1.name, "Alice");
s1.age = 20;
s1.gpa = 3.8;

// 结构体数组
struct Student class[30];

共用体(Union)

c 复制代码
union Data {
    int i;
    float f;
    char str[20];
};

// 使用共用体
union Data data;
data.i = 10;        // 现在存储的是整数
data.f = 220.5;     // 现在存储的是浮点数,整数值被覆盖

枚举(Enumeration)

c 复制代码
// 定义枚举
enum Weekday {
    MONDAY,     // 0
    TUESDAY,    // 1
    WEDNESDAY,  // 2
    THURSDAY,   // 3
    FRIDAY,     // 4
    SATURDAY,   // 5
    SUNDAY      // 6
};

// 使用枚举
enum Weekday today = WEDNESDAY;

指针类型(Pointer Type)

基本指针

c 复制代码
int x = 10;
int *ptr = &x;      // ptr指向x的地址

float y = 3.14;
float *fptr = &y;   // fptr指向y的地址

char ch = 'A';
char *cptr = &ch;   // cptr指向ch的地址

指针与数组

c 复制代码
int arr[5] = {1, 2, 3, 4, 5};
int *p = arr;       // p指向数组首元素

// 通过指针访问数组元素
printf("%d", *p);        // 输出1
printf("%d", *(p + 1));  // 输出2

结构体指针

c 复制代码
struct Point {
    int x;
    int y;
};

struct Point p1 = {10, 20};
struct Point *ptr = &p1;

// 通过指针访问结构体成员
printf("x = %d, y = %d", ptr->x, ptr->y);  // 使用->运算符

函数指针

c 复制代码
// 函数指针声明
int (*funcPtr)(int, int);

// 函数定义
int add(int a, int b) { return a + b; }
int multiply(int a, int b) { return a * b; }

// 使用函数指针
funcPtr = add;
int result = funcPtr(5, 3);  // 结果为8

funcPtr = multiply;
result = funcPtr(5, 3);      // 结果为15

空类型(Void Type)

void作为函数返回类型

c 复制代码
// 无返回值的函数
void printMessage(char *msg) {
    printf("%s\n", msg);
    // 不需要return语句,或使用 return;
}

// 使用
printMessage("Hello, World!");

void作为函数参数

c 复制代码
// 无参数的函数
int getRandomNumber(void) {
    return rand();
}

// 使用
int num = getRandomNumber();

void指针(通用指针)

c 复制代码
// void指针可以指向任何数据类型
int x = 100;
float y = 3.14;
char str[] = "Hello";

void *genericPtr;

genericPtr = &x;        // 指向整型
printf("%d", *(int*)genericPtr);  // 需要类型转换

genericPtr = &y;        // 指向浮点型
printf("%f", *(float*)genericPtr);

genericPtr = str;       // 指向字符数组
printf("%s", (char*)genericPtr);

类型修饰符(Type Modifiers)

符号修饰符

c 复制代码
signed int a = -10;     // 有符号整型(默认)
unsigned int b = 100;   // 无符号整型

大小修饰符

c 复制代码
short int s = 100;      // 短整型
long int l = 100000L;   // 长整型
相关推荐
diediedei2 小时前
嵌入式数据库C++集成
开发语言·c++·算法
xie0510_2 小时前
string模拟实现
开发语言·c++·算法
FAFU_kyp2 小时前
RISC0_ZERO项目在macOs上生成链上证明避坑
开发语言·后端·学习·macos·rust
萧曵 丶2 小时前
JavaScript 函数各种写法和场景
开发语言·javascript·ecmascript
雪域迷影2 小时前
C++17中使用inline修饰类的静态成员变量
开发语言·c++·inline static·类静态成员变量
星火开发设计2 小时前
共用体 union:节省内存的特殊数据类型
java·开发语言·数据库·c++·算法·内存
仰望星空_Star3 小时前
Java证书操作
java·开发语言
女王大人万岁3 小时前
Go语言time库核心用法与实战避坑
服务器·开发语言·后端·golang
云游云记3 小时前
php Token 主流实现方案详解
开发语言·php·token