数据介绍
程序 = 数据 + 算法。
数据,能表示事物某种属性的数值,都称为数据。
数据的分类
分为常量数据和变量数据。
常量数据:指数值不会发生更改的数据。
比如: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; // 长整型