在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。
C 中的类型可分为以下几种:
序号 | 描述 |
---|---|
1 | 基本类型:它们是算术类型,包括两种类型:整数类型和浮点类型。 |
2 | 枚举类型:它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变。 |
3 | void 类型:类型说明符 void 表明没有可用的值。 |
4 | 派生类型:它们包括:指针类型、数组类型、结构类型、共用体类型和函数类型。 |
整数类型
下表列出了关于标准整数类型的存储大小和值范围的细节:
类型 | 储存大小 | 位数 | 值范围 |
---|---|---|---|
char | 1 字节 | 8 | -128 到 127 或 0 到 255 |
unsigned char | 1 字节 | 8 | 0 到 255 |
signed char | 1 字节 | 8 | -128 到 127 |
int | 2(16位系统) 或 4 字节 | 16/32 | -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 |
unsigned int | 2 或 4 字节 | 16/32 | 0 到 65,535 或 0 到 4,294,967,295 |
short | 2 字节 | 16 | -32,768 到 32,767 |
unsigned short | 2 字节 | 16 | 0 到 65,535 |
long | 4 字节 | 32 | -2,147,483,648 到 2,147,483,647 |
unsigned long | 4 字节 | 32 | 0 到 4,294,967,295 |
浮点类型
类型 | 存储大小 | 值范围 | 精度 |
---|---|---|---|
float | 4 字节 | 1.2E-38 到 3.4E+38 | 6 位小数 |
double | 8 字节 | 2.3E-308 到 1.7E+308 | 15 位小数 |
long double | 16 字节 | 3.4E-4932 到 1.1E+4932 | 19 位小数 |
下表列出了关于标准浮点类型的存储大小、值范围和精度的细节:
类型 | 存储大小 | 值范围 | 精度 |
---|---|---|---|
float | 4 字节 | 1.2E-38 到 3.4E+38 | 6 位小数 |
double | 8 字节 | 2.3E-308 到 1.7E+308 | 15 位小数 |
long double | 16 字节 | 3.4E-4932 到 1.1E+4932 | 19 位小数 |
注意,各种类型的存储大小与系统位数有关,但目前通用的以64位系统为主。
以下列出了32位系统与64位系统的存储大小的差别(windows 相同):
类型 | Windows win32/x64 | Linux gcc-5.3.1 i686 | Linux gcc-5.3.1 x86_64 |
---|---|---|---|
char | 1 | 1 | 1 |
unsinged char | 1 | 1 | 1 |
short | 2 | 2 | 2 |
unsigned short | 2 | 2 | 2 |
int | 4 | 4 | 4 |
unsigned int | 4 | 4 | 4 |
long | 4 | 4 | 8 |
unsigned long | 4 | 4 | 8 |
float | 4 | 4 | 4 |
double | 8 | 8 | 8 |
long int | 4 | 4 | 8 |
long long | 8 | 8 | 8 |
long double | 8 | 12 | 16 |
下面对比一下 Java 看的数据结构与类型
Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
- 整数:包括int,short,byte,long
- 浮点型:float,double
- 字符:char
- 布尔:boolean
类型 | 大小 | 最小值 | 最大值 |
---|---|---|---|
boolean | ----- | ----- | ------ |
char | 16-bit | Unicode 0 | Unicode 2^16-1 |
byte | 8-bit | -128 | +127 |
short | 16-bit | -2^15 | +2^15-1 |
int | 32-bit | -2^31 | +2^31-1 |
long | 64-bit | -2^63 | +2^63-1 |
float | 32-bit | IEEE754 | IEEE754 |
double | 64-bit | IEEE754 | IEEE754 |
void |
关于boolean:Java虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”。这样我们可以得出boolean类型占了单独使用是4个字节,在数组中又是1个字节。
输入输出
标准输入输出函数,需要引入头文件 <stdio.h>.输入时可能会使用到以下的占位符:
类型 | 占位符 |
---|---|
int | %d |
short | %d |
long | %ld |
float | %f |
double | %lf |
char | %c |
'string' | %s |
八进制表示 | %o |
十六进制表示 | %x |
- 输出:
#include <stdio.h>
void main(){
int i = 1;
printf("%d\n",i);
float f = 23.3f;
printf("%f\n",f);
}
- 输出:
#include <stdio.h>
void main(){
int i;
printf("请输入一个整数:");
//赋值
scanf("%d",&i); //控制台输入,&取地址符
//打印
printf("i的值为:%d\n",i);
}
Note :如果在编绎过程中以下提示:
error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
这是因为编绎器提示使用了不安全的函数,可采用以下解决方案:
将原来的旧函数替换成新的 Security CRT functions。
-
屏蔽警告。使用以下办法中一种即可:
- 在文件中的最前面,加入宏:#define _CRT_SECURE_NO_WARNINGS
- 或:声明 #param warning(disable:4996)
- 更改预处理定义,步骤如下:
项目->属性->配置属性->C/C++ -> 预处理器 -> 预处理器定义,增加:
_CRT_SECURE_NO_DEPRECATE