C语言有哪些合法数据类型?

99ANYc3cd6
预计阅读时长 14 分钟
位置: 首页 C语言 正文

基本数据类型

这是C语言最基础、最常用的数据类型,它们是构成其他复杂数据类型的基石,基本数据类型又可以分为三类:整型、浮点型和字符型。

c语言提供的合法的数据类型
(图片来源网络,侵删)

a) 整型

用于表示整数。

数据类型 描述 典型大小(字节) 范围示例
char 字符或小整数 1 -128 到 127 或 0 到 255
unsigned char 无符号字符/小整数 1 0 到 255
short 短整型 2 -32,768 到 32,767
unsigned short 无符号短整型 2 0 到 65,535
int 整型 4 -2,147,483,648 到 2,147,483,647
unsigned int 无符号整型 4 0 到 4,294,967,295
long 长整型 4 或 8 (取决于系统)
unsigned long 无符号长整型 4 或 8 (取决于系统)
long long 双长整型 (C99标准) 8 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
unsigned long long 无符号双长整型 8 0 到 18,446,744,073,709,551,615

注意:

  • char 类型在C语言中本质上是整型,因为它在内存中存储的是字符的ASCII码值。
  • int 类型的大小在不同平台(如32位和64位系统)上可能不同,通常是系统字长。
  • unsigned 关键字用于表示无符号类型,即没有正负之分,范围全部为正数。

b) 浮点型

用于表示带有小数部分的实数。

数据类型 描述 典型大小(字节) 精度示例
float 单精度浮点数 4 约6-7位有效数字
double 双精度浮点数 8 约15-16位有效数字
long double 长双精度浮点数 8 或 16 通常比 double 精度更高或相同

示例:

c语言提供的合法的数据类型
(图片来源网络,侵删)
float price = 99.99f; // f后缀表示这是一个float类型常量
double pi = 3.14159265358979;
long double large_number = 1.234567890123456L; // L后缀表示long double

c) 字符型

专门用于存储单个字符。

数据类型 描述 大小
char 存储一个字符,如 'A', 'b', '7' 1字节

示例:

char grade = 'A';
char newline = '\n'; // 转义字符,代表换行

构造数据类型

也称为聚合数据类型,它们是由基本数据类型或其他构造类型组合而成的。

a) 数组

定义:一组相同类型的数据元素的集合,这些元素在内存中连续存放。 特点:大小在定义时必须是常量或常量表达式。

c语言提供的合法的数据类型
(图片来源网络,侵删)

示例:

int scores[5]; // 一个可以存放5个整数的整型数组
char name[20]; // 一个可以存放20个字符的字符数组(即字符串)
float prices[10]; // 一个存放10个浮点数的数组

b) 结构体

定义:将不同类型的数据组合成一个单一的、自定义的类型,每个成员都有自己的内存空间。 特点:成员可以是不同的数据类型。

示例:

// 定义一个名为 Student 的结构体类型
struct Student {
    int id;        // 学号
    char name[50]; // 姓名
    float score;   // 分数
};
// 声明一个 Student 类型的变量
struct Student student1;
student1.id = 1001;
strcpy(student1.name, "Zhang San"); // strcpy用于复制字符串
student1.score = 95.5;

c) 共用体

定义:一种特殊的构造类型,它允许在同一块内存空间中存储不同类型的数据,但任何时候只有一个成员的值是有效的特点:所有成员共享同一段内存,其大小是最大成员的大小。

示例:

// 定义一个名为 Data 的共用体类型
union Data {
    int i;
    float f;
    char c;
};
// 声明一个 Data 类型的变量
union Data data;
data.i = 10;
printf("%d\n", data.i); // 输出 10
data.f = 220.5;
printf("%f\n", data.f); // 输出 220.5,data.i 的值已经被破坏

d) 枚举

定义:为一组整型常数赋予有意义的名字,枚举量默认从0开始,依次递增。

示例:

// 定义一个名为 WeekDay 的枚举类型
enum WeekDay {
    MONDAY,    // 值为 0
    TUESDAY,   // 值为 1
    WEDNESDAY, // 值为 2
    THURSDAY,  // 值为 3
    FRIDAY,    // 值为 4
    SATURDAY,  // 值为 5
    SUNDAY     // 值为 6
};
// 声明一个 WeekDay 类型的变量
enum WeekDay today = FRIDAY;
printf("Today is day number: %d\n", today); // 输出 4

指针数据类型

定义:一种特殊的数据类型,它存储的是另一个变量在内存中的地址。

特点:指针是C语言的强大功能,但它也是最容易出错的地方之一,指针必须先指向一个有效的内存地址才能安全使用。

示例:

int num = 10;
int *ptr; // 声明一个指向整型的指针变量 ptr
ptr = # // 将 num 的地址赋给 ptr
printf("Value of num: %d\n", num);      // 输出 10
printf("Value pointed by ptr: %d\n", *ptr); // *ptr 是解引用操作,输出 10
printf("Address of num: %p\n", (void*)&num); // 输出 num 的地址
printf("Value of ptr: %p\n", (void*)ptr);     // 输出 ptr 存储的地址(与num的地址相同)

注意:

  • 指针的类型必须与它所指向的变量的类型匹配(int* 指向 int)。
  • void* 是一种特殊的指针类型,它可以指向任何类型的数据,但在使用前通常需要强制转换。

空类型

定义void 类型表示“无类型”或“空类型”。

用途:

  1. 函数返回值:当函数不返回任何值时,其返回类型应声明为 void
    void sayHello() {
        printf("Hello, World!\n");
    }
  2. 函数参数:当函数不接受任何参数时,在C语言中(尤其是在K&R风格或现代标准中)可以使用 void 来明确表示。
    int getRandomNumber(void) {
        return rand();
    }
  3. 通用指针:如上所述,void* 可以作为通用指针类型。

C语言的数据类型体系非常灵活和强大,理解这些数据类型的区别、大小和用途是编写高效、健壮的C程序的基础。

类别 类型名称 描述
基本类型 char, short, int, long, long long 整数
float, double, long double 浮点数
char (用于字符) 单个字符
构造类型 array 相同类型元素的集合
struct 不同类型成员的聚合
union 共享内存的不同类型成员
enum 命名的整型常量集合
指针类型 type * 指向 type 类型数据的地址
空类型 void 无类型,用于函数返回值或参数
-- 展开阅读全文 --
头像
c语言程序设计教程习题解答如何高效自学?
« 上一篇 今天
dede5.7 pwd字段加密方式是什么?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]