C语言中的数据类型可以分为以下几个大类:
基本整型
char
字符型,通常占用1个字节(8位),可以存储ASCII字符或者其他系统的字符集编码。虽然主要用于字符,但也可以作为整数进行算术运算。
char c = 'A'; // 字符示例
char n = 65; // 整数值示例
大小写转换示例
printf("请输入一个字符: \n");
char c = getchar();
if (c >= 'a' && c <= 'z')
{
c -= ('a' - 'A');
}
else if (c >= 'A' && c <= 'Z')
{
c += ('a' - 'A');
}
printf("大小写转换后的结果是: %c, ASCII: %d\n", c, c);
short int 或 short
短整型,至少2个字节,具体大小取决于编译器和系统平台。
short s = 32767; // 短整型的典型最大值
int
整型,默认大小根据目标机器架构,一般为4个字节,用于表示中等范围的整数值。
int i = 1000;
long int 或 long
长整型,至少与int
一样大,在某些系统上可能更大,通常是4或8个字节。
long l = 2147483647L; // 在32位系统上的典型最大值
long long int 或 long long
扩展长整型,至少8个字节,提供更大的整数范围。
long long ll = 9223372036854775807LL; // 64位系统上的典型最大值
每种整型都有对应的无符号版本,例如 unsigned char
、unsigned short
、unsigned int
、unsigned long
和 unsigned long long
,它们只能表示非负整数,并且允许的最大值是相应有符号类型的两倍。
浮点型
float
单精度浮点数,通常占4个字节,能够表示小数和很大的数值,但精度相对较低。
float f = 3.14159f;
double
双精度浮点数,通常占8个字节,比float
有更多的精度来表示实数。
double d = 3.14159265358979323846;
long double
扩展精度浮点数,至少与double
同样精确,但在一些实现中可能会提供更多精度,通常占用更多内存空间。
long double ld = 1.0L / 3.0L;
枚举类型(Enum)
枚举类型是一种用户自定义的数据类型,它由一组命名的常量组成。
enum Color {Red, Green, Blue};
enum Color myColor = Red;
布尔类型(_Bool或bool)
C99标准引入了布尔类型 _Bool
,在C++中对应为 bool
,它可以取两个值:true
(非零)和false
(零)。在C语言中,可以通过 <stdbool.h>
头文件访问布尔类型。
#include <stdbool.h>
bool flag = true;
void类型
void
类型不表示任何特定类型的数据,通常用作函数返回类型来表示函数不返回值,或者用作指针类型以指向任意类型的数据。
void fun(void); // 函数不返回任何值
void *p; // 指针可以指向任意类型的对象
派生数据类型
数组
一系列相同类型的数据元素集合。
int arr[5]; // 声明一个包含5个整数的数组
char str[20]; // 声明一个可以容纳20个字符的字符串数组
指针
存储其他变量地址的变量。
int value = 10;
int *pointer = &value; // 指针指向一个整型变量
结构体(struct)
用于组合不同数据类型的变量,形成一种复合类型。
struct Person {
char name[50];
int age;
};
struct Person person;
共用体(union)
与结构体相似,但所有成员共享同一块内存空间。
union Data {
int i;
float f;
char c;
};
union Data data;
函数指针
指向函数的指针,可以像调用普通函数那样通过函数指针调用函数。
typedef void (*funcPtr)(int);
funcPtr myFunction = &printNumber;
void printNumber(int num) {
printf("The number is: %d\n", num);
}
typedef定义的类型
typedef
关键字可以为已存在的数据类型创建一个新的名称,尽管这不创造新类型,但在某种程度上可以看作是对现有类型的一种“派生”。
typedef int Integer;
Integer count;
评论区