【C语言】(2)数据类型

发布时间:2024年01月23日

在 C 语言中,数据类型定义了变量或函数能够接受的数据形式。它们决定了数据存储的空间大小和如何解释存储的位模式。C语言提供了多种基本数据类型,可分为以下几类:

  1. 基本类型: 算术类型,包括两种类型:整数类型和浮点类型。
  2. 枚举类型: 算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量。
  3. void 类型: 类型说明符 void 表明没有可用的值。
  4. 派生类型: 包括:指针类型、数组类型、结构类型、共用体类型和函数类型。 数组类型和结构类型统称为聚合类型。函数的类型指的是函数返回值的类型。

一.基本类型

基本类型是算术类型,包括整数类型和浮点类型。整数类型用于表示没有小数部分的数值,而浮点类型用于表示有小数部分的数值。

整数类型

下表列出了关于标准整数类型的存储大小和值范围的细节:

类型描述值范围存储大小
char字符型-128 到 1271 字节
unsigned char无符号字符型0 到 2551 字节
signed char有符号字符型-128 到 1271 字节
int整型-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,6472 或 4 字节
unsigned int无符号整型0 到 65,535 或 0 到 4,294,967,2952 或 4 字节
short短整型-32,768 到 32,7672 字节
unsigned short无符号短整型0 到 65,5352 字节
long长整型-2,147,483,648 到 2,147,483,6474 字节
unsigned long无符号长整型0 到 4,294,967,2954 字节
long long长长整型-9,223,372,036,854,775,808 到 9,223,372,036,854,775,8078 字节
unsigned long long无符号长长整型0 到 18,446,744,073,709,551,6158 字节
当使用unsigned数值无负数范围。

浮点类型

下表列出了关于标准浮点类型的存储大小、值范围和精度的细节:

类型存储大小值范围精度
float4 字节1.2E-38 到 3.4E+386 位有效位
double8 字节2.3E-308 到 1.7E+30815 位有效位
long double16 字节3.4E-4932 到 1.1E+493219 位有效位
#include <stdio.h>

int main() {
    int integer = 100;
    float floating = 12.34;
    double doubleNum = 123.456;

    printf("Integer: %d\n", integer);
    printf("Floating Point: %f\n", floating);
    printf("Double: %lf\n", doubleNum);

    return 0;
}

头文件 float.h 定义了宏,在程序中可以使用这些值和其他有关实数二进制表示的细节。下面的示例将输出浮点类型占用的存储空间以及它的范围值:

#include <stdio.h> 
#include <float.h>  
int main() {
	printf("float 存储最大字节数 : %lu \n", sizeof(float));
	printf("float 最小值: %E\n", FLT_MIN );
	printf("float 最大值: %E\n", FLT_MAX );   
	printf("精度值: %d\n", FLT_DIG );      
	return 0; 
}

%E 为以指数形式输出单、双精度实数,详细说明查看 C 库函数 - printf()

当编译并执行上面的程序时,它会产生下列结果:

float 存储最大字节数 : 4 
float 最小值: 1.175494E-38
float 最大值: 3.402823E+38
精度值: 6

二.枚举类型

枚举类型是一种特殊的基本类型,用于定义在程序中只能赋予其一定的离散整数值的变量。

#include <stdio.h>
enum color { red, green, blue };
int main() {
    enum color favoriteColor;
    favoriteColor = green;
    if (favoriteColor == red) {
        printf("红色");
    } else if (favoriteColor == green) {
        printf("绿色");
    } else {
        printf("蓝色");
    }
    return 0;
}

三.void 类型

void 类型指定没有可用的值。它用于三种情况:

  1. 函数返回为空。
  2. 函数参数为空。
  3. 指针指向 void。
#include <stdio.h>

void printHello() {
    printf("Hello, World!");
}

int main() {
    printHello();
    return 0;
}

四.派生类型

包括指针类型、数组类型、结构类型、共用体类型和函数类型。这些类型基于基本类型构建。

#include <stdio.h>
struct person {
    char name[50];
    int age;
};
int main() {
    struct person p1 = {"John Doe", 30};
    printf("Name: %s\nAge: %d\n", p1.name, p1.age);
    return 0;
}

五.类型转换

类型转换是将一个数据类型的值转换为另一种数据类型的值。

C 语言中有两种类型转换:

  • 隐式类型转换:隐式类型转换是在表达式中自动发生的,无需进行任何明确的指令或函数调用。它通常是将一种较小的类型自动转换为较大的类型,例如,将int类型转换为long类型或float类型转换为double类型。隐式类型转换也可能会导致数据精度丢失或数据截断。
  • 显式类型转换:显式类型转换需要使用强制类型转换运算符(type casting operator),它可以将一个数据类型的值强制转换为另一种数据类型的值。强制类型转换可以使程序员在必要时对数据类型进行更精确的控制,但也可能会导致数据丢失或截断。
隐式类型转换
int i = 100;
double result;
result = i / 30.0; //转换为double
显式类型转换
double d = 9.5;
int total = (int)d + 1; //转换为int类型

六.变量与常量

变量

变量是存储数据的内存空间的名称。它们的值在程序执行期间可以改变。变量根据其定义的位置和作用域可分为局部变量和全局变量。

局部变量

局部变量在函数或语句块(例如{}内)中定义,并且只能在该函数或语句块内部使用。它的生命周期从声明开始,到所在函数或语句块的结束。

void function() {
	int localVar = 10; // 局部变量     
	printf("%d\n", localVar); 
}

全局变量

全局变量在函数外部定义,通常在程序的顶部。全局变量的作用域是整个文件,也可以在其他文件中通过外部引用访问。它的生命周期贯穿整个程序的执行时间。

int globalVar = 20; // 全局变量  
void function() {     
	printf("%d\n", globalVar); 
}  
int main() {     
	function();     
	return 0; 
}

名称冲突

当局部变量和全局变量同名时,局部变量在其作用域内将优先被使用。

引入其他文件的全局变量

使用extern关键字可以在一个文件中访问另一个文件的全局变量。

示例
// 在另一个文件中定义的全局变量 
extern int g_val;

常量

常量是程序中值不变的元素。C 语言提供了多种定义常量的方法。

字面常量

字面常量是直接出现在程序中的值,如数字 10 或字符串 "hello"

const 常变量

const关键字用于定义其值不可改变的变量,注意其实还属于变量。

const int a = 1;

#define 标识符常量

使用#define预处理指令定义的常量。

#define MAX 100

枚举常量

枚举是一种定义命名的整型常量的方法。枚举的每个成员都代表一个常量。

enum Sex { 
// 默认值从零开始     
MALE, FEMALE, SECRET 
};  
enum Sex s = MALE;
文章来源:https://blog.csdn.net/qq_40951951/article/details/135757107
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。