C 语言中的数据类型


2021年8月23日, Learn eTutorial
2368

在本教程中,您将通过示例程序掌握 C 语言中使用的基本数据类型,如字符、整数和十进制数。此外,您还将学习 C 语言中用于改变数据类型的修饰符。

我们如何在 C 语言中定义数据类型?

与任何其他编程语言相比,C 语言的数据类型更简单、更紧凑。数据类型可以定义为变量或对象可以持有的数据种类,并根据数据执行操作。它还有助于确定程序员打算编译或解释的数据的类型和大小。根据数据类型可以分配内存,这意味着我们可以为数据及其在内存中的操作分配所需的空间。

C 处理器处理的所有类型的数据输入主要包括三种类型 -

  • 字符
  •  整数
  • 十进制数。

在 C 语言中,这三种类型分别表示为 'char', 'int', 'float',被称为基本数据类型。例如

  1. int a, int b , int c;          /* a, b, c 是整数数据类型的变量。*/
  2. char x, y, z;                  /* x, y, z 是字符数据类型的变量。*/
  3. float pi = ‘3.14’;             /*pi 是浮点数据类型的变量*/

事实上,这种语言中的数据类型数量是无限的,因为用户可以根据自己的需要定义新的数据类型。在下一节中,我们将详细讨论这些基本数据类型。

Data types in C

C 语言中的数据类型

正如我们已经看到的,数据类型有多种类型,因此有不同的规范。下表给出了在 32 位架构系统中,每种数据类型对应的格式说明符、内存大小和值范围。

数据类型 格式说明符 内存大小 值范围
char %c 1 字节 -128 到 127
int %d 2 字节 -32,768 到 32,767
float %f 4 字节 1.2E-38 到 3.4E+38
double %lf 8 字节 2.3E-308 到 1.7E+308
void - - -

C语言中的修饰符是什么

修饰符是用于改变基本数据类型当前特性的关键字。修饰符与基本数据类型一起使用,可以增加或减少数据类型的大小或符号。在 C 语言中主要使用两种类型的修饰符。它们是

  • 符号修饰符 - signed 或 unsigned
  • 大小修饰符 – short 或 long

符号修饰符

当使用 unsigned 修饰符时,数字总是正数,而当使用 signed 修饰符时,数字可能是正数或负数。如果未提及修饰符,则默认分配 signed 限定符。当我们事先知道数字将始终为正数时,我们通常使用 unsigned 修饰符。此外,这些修饰符只能与 int 和 char 类型一起使用。

大小修饰符

大小修饰符有助于增加或减少数据类型的大小。当使用 short 修饰符时,它会减小数据类型的范围,而 long 修饰符则相反,即增加数据类型的范围。需要注意的重要一点是,这些大小修饰符与 int 数据类型配合得很好,double 只能使用 long。char 和 float 都不使用这些修饰符中的任何一个。

在 C 语言中,数据类型的大小取决于所使用的机器,对于 16 位机器,类型的大小是 2 字节,而对于 32 位或 64 位机器,类型的大小是 4 字节。

C - 整数数据类型

数据类型 'int' 表示在特定范围内的任何正整数或负整数。范围根据编译器的不同而变化,例如:在 16 位编译器(如 Turbo C/C++)的情况下,范围是 -32768 到 32767,而在 32 位编译器(如 Visual C++)的情况下,范围是 -2147483648 到 2147483647。通常,32 位处理器(如 Intel Pentium)可以成功运行 16 位编译器,但反之则不行。

数据类型 格式说明符 内存大小 范围 (Range)
short int / short signed int %d 2 字节 -32,768 到 32,767
unsigned short int %hu 2 字节 0 到 65,535
 int / signed int %d  4 字节 -2147483648 到 2147483647
unsigned int %d 4 字节 0 到 4294967295
short int %hd 2 字节 -32,768 到 32,767
long int / signed long int %ld 8 字节 -2,147,483,648 到 2,147,483,647
Unsigned long int %lu 8 字节 0 到 4,294,967,295

'int' 可以定义为两个不同的子集:short 和 long。它们可以分别声明为 'short int' 或 'short' 和 'long int' 或 'long'。前者的范围是 -32768 到 32767,后者是 -2147483648 到 2147483647。在适用的地方使用 'short' 数据类型,可以显著提高处理速度。'int' 也可以分为两个子类别:signed 和 unsigned。将数据类型从 'int' 更改为 'unsigned int' 会使其数字存储容量加倍(0 到 65535),并省略所有负数。

#include <stdio.h>
#include <stdlib.h>
void main()
{

int a;
int short b;
short c;
int long d;
long e;
 printf(" Size of  a is %d\n",sizeof(a));
 printf(" Size of  b is %d\n",sizeof(b));
 printf(" Size of  c is %d\n",sizeof(c));
 printf(" Size of  d is %d\n",sizeof(d));
 printf(" Size of  eis %d\n",sizeof(e));

 printf(" Signed int - INT_MAX     :   %d\n", INT_MAX);
 printf(" Signed int - INT_MIN     :   %d\n", INT_MIN);
 printf(" Unsigned int - UINT_MAX    :   %u\n", (unsigned int) UINT_MAX);

}

输出

Size of  a is 4
 Size of  b is 2
 Size of  c is 2
 Size of  d is 4
 Size of  e is 4

 Signed int - INT_MAX     :   2147483647
 Signed int - INT_MIN     :   -2147483648
 Unsigned int - UINT_MAX    :   4294967295

C - 浮点数据类型

如果您需要使用任何分数或小数,则必须声明 Float 数据类型。它在 RAM 中分配 4 字节的内存,其值范围从 -3.4e38 到 3.4e38。对于更大的数字,有另一种数据类型 'double',它占用 8 字节的内存。它的值范围从 -1.7e308 到 1.7e308。如果需要的数字更大,您可以使用 'long double',它占用 10 字节的内存,范围为 -1.7e4932 到 1.7e4932。下面显示了一个表格表示。

类型 格式说明符 内存大小 值范围 精度
float %f 4 字节 1.2E-38 到 3.4E+38 6 位小数
double %lf 8 字节 2.3E-308 到 1.7E+308 15 位小数
long double %Lf 10 字节 3.4E-4932 到 1.1E+4932 19 位小数

 

这些数据类型声明的示例如下:

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>
void main()
{

float x;
double y;
long double z;

 printf(" Size of  x is %d\n",sizeof(x));
 printf(" Size of  y is %d\n",sizeof(y));
 printf(" Size of  z is %d\n\n",sizeof(z));

 printf(" Float Minimum Range     :   %g\n", (float) FLOAT_MIN);
 printf(" Float Maximum Range     :   %g\n", (float) FLOAT_MAX);
 printf(" Double Maximum Range    :   %g\n", (double) DBL_MAX);

}

输出

Size of  x is 4
 Size of  y is 8
 Size of  z is 16

Float Minimum Range     :   1.17549e-038
Float Maximum Range     :   3.40282e+038
Double Maximum Range    :   1.79769e+308

C - CHAR 数据类型

简单来说,'char' 数据类型被设计为通过键盘接收单个输入(单次按键),如 a、b、c 等。虽然看起来有点令人困惑,但 'char' 也有两种类型 - signed 和 unsigned。实际上,键盘上的每个字符都对应一个特定的 ASCII 值。一个简单的程序可以展示这一点。

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>

void main()
{

char c;
         printf("Enter any character -->");
         scanf("%c", &c);
         printf("ASCII value of %c is %d\n", c, c);
         printf("Size of  c is %d\n\n",sizeof(c));

         printf("Character Minimum Range   :   %d\n", CHAR_MIN);
         printf("Character Maximum Range   :   %d\n", CHAR_MAX);

} 

在这个程序中,'%c' 将显示确切的字符,而 %d 将显示相应的 ASCII 值。例如,如果您输入 'C',输出将是 'The ASCII value of C is 67'(C 的 ASCII 值是 67)。

Enter any character -->C
ASCII value of C is 67
Size of  c is 1

Character Minimum Range   :   -128
Character Maximum Range   :   127

这里就涉及到 signed 和 unsigned char 的概念。顾名思义,前者的数值范围从 -128 到 +127,而后者则为 0 到 255。稍后我们将需要处理字符的数值。在这些情况下,将数据类型指定为 'unsigned char' 会很有帮助,因为正整数的计算要容易得多。下表显示了 C 语言中 char 数据类型的大小和范围。

类型 格式说明符 内存大小 值范围
float

%c

1 字节

-128 到 127

double

%c

1 字节

0 到 255

C - VOID 数据类型

在 C 语言中,'Void' 表示“无”或“空”。它与任何其他数据类型(如 'int' 或 'char')完全不同,后者对应于具有特定属性的实体。它主要用于指针相关的操作,我们需要在地址级别更改变量的值。要理解这一点,我们必须了解“指针”,这将在后面讨论。

通过分析函数返回类型来理解 'void' 会更容易。如果一个函数被定义为 'int check();' 或 'char check();',这意味着返回值将分别是整数或字符。这里有一个简单的例子:

int check();
{
int a; 
a = 5;
return  a; 
} 

但是,当一个函数不需要返回任何东西,而只是执行一个简单的任务,比如打印一条语句时,可以使用 void。例如:

void check_it();
{
printf(" Void is printing a statement ");
}
 

**因此,void 告诉编译器不要接受任何参数。