C语言中的数据类型
在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。
序号 | 类型描述 |
1 | 基本数据类型:
|
2 | 派生数据类型:
|
3 | 指针类型(pointer):用于存储变量的内存地址,可进行间接访问和修改变量的值。 |
数组类型和结构类型统称为聚合类型。函数的类型指的是函数返回值的类型。
整数类型
类型 | 存储大小 | 数值范围 |
char | 1字节 | -128-127或0-255 |
unsigned char | 1字节 | 0-255 |
signed char | 1字节 | -128-127 |
short | 2字节 | -32767-32767 |
unsigned short | 2字节 | 0-65535 |
int | 2-4字节 | -32,768 -32,767 -2,147,483,648 - 2,147,483,647 |
unsigned int | 2-4字节 | 0 - 65,535 0 - 4,294,967,295 |
long | 4字节 | -2,147,483,648 - 2,147,483,647 |
unsigned long | 4字节 | 0 - 4,294,967,295 |
注意,各种类型的存储大小与系统位数有关,但目前通用的以64位系统为主
为了得到某个类型或某个变量在特定平台上的准确大小,可以使用siezof运算符.
表达式: sizeof(type)
#includ<stdio.h>
#includ<stdio.h>
int main(){
printf("int的存储大小: %lu \n",sizeof(int));
//"%lu"是用来格式化输出无符号长整型(unsigned long)的格式控制符
return 0;
}
浮点类型
类型 | 存储大小 | 值范围 | 精度 |
float | 4字节 | 1.2E-38 - 3.4E+338 | 6位有效位 |
double | 8字节 | 2.3E-308 - 1.7E+308 | 15位有效位 |
long double | 16字节 | 3.4E-4932 - 1.1E+4932 | 19位有效位 |
#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;
}
输出结果:
float 存储最大字节数 : 4
float 最小值: 1.175494E-38
float 最大值: 3.402823E+38
精度值: 6
void类型
序号 | 类型描述 |
1 | 函数返回为空 C 中有各种函数都不返回值,或者您可以说它们返回空。不返回值的函数的返回类型为空。例如 void exit (int status); |
2 | 函数参数为空 C 中有各种函数不接受任何参数。不带参数的函数可以接受一个 void。例如 int rand(void); |
3 | 指针指向 void 类型为 void * 的指针代表对象的地址,而不是类型。例如,内存分配函数 void *malloc( size_t size ); 返回指向 void 的指针,可以转换为任何数据类型。 |
类型转换
在C语言中,我们可以使用类型转换将一种数据类型转换为另一种数据类型。类型转换的语法格式为:
(type) expression
其中,type表示要转换的目标数据类型,expression表示需要转换的表达式或变量。
C语言中的类型转换主要有两种:隐式类型转换和显式类型转换。
隐式类型转换
隐式类型转换(自动类型转换):在某些情况下,C语言会自动进行类型转换,以保证表达式的结果正确。常见的隐式类型转换包括:
-
当表达式中包含不同类型的操作数时,会根据一定的规则进行自动转换,以保证操作能够进行。例如,当一个操作数是int类型,另一个是float类型,那么C语言会将int类型的操作数转换为float类型,使得两个操作数的类型相同。
-
当赋值语句中右侧的表达式的类型与左侧变量的类型不匹配时,会进行自动类型转换。例如,将一个float类型的值赋给一个int类型的变量时,C语言会将float类型的值转换为int类型,然后赋给变量。
-
int num1 = 10; long num2; num2 = num1; // 将int类型的值隐式转换为long类型
float num1 = 3.14; double num2; num2 = num1; // 将float类型的值隐式转换为double类型
显式类型转换(强制类型转换)
显式类型转换(强制类型转换):在某些情况下,我们可以使用强制类型转换来显式地改变一个表达式或变量的数据类型。显式类型转换可以使用括号将目标数据类型括起来,并将要转换的表达式或变量放在括号内。
(type) expression
需要注意的是,进行显式类型转换时,可能会发生数据丢失或截断的情况,因此需要谨慎使用,并确保转换后的数据仍然能够正常使用。
以下是一个使用显式类型转换的示例:
int a = 20;
float b;
b = (float) a; // 将int类型的a转换为float类型,并赋给b
在C语言中,我们可以使用隐式类型转换和显式类型转换来改变数据的类型。隐式类型转换是自动进行的,而显式类型转换需要我们手动指定转换的目标数据类型。