在本教程中,您将通过示例程序掌握 C 语言中使用的基本数据类型,如字符、整数和十进制数。此外,您还将学习 C 语言中用于改变数据类型的修饰符。
与任何其他编程语言相比,C 语言的数据类型更简单、更紧凑。数据类型可以定义为变量或对象可以持有的数据种类,并根据数据执行操作。它还有助于确定程序员打算编译或解释的数据的类型和大小。根据数据类型可以分配内存,这意味着我们可以为数据及其在内存中的操作分配所需的空间。
C 处理器处理的所有类型的数据输入主要包括三种类型 -
在 C 语言中,这三种类型分别表示为 'char', 'int', 'float',被称为基本数据类型。例如
事实上,这种语言中的数据类型数量是无限的,因为用户可以根据自己的需要定义新的数据类型。在下一节中,我们将详细讨论这些基本数据类型。
正如我们已经看到的,数据类型有多种类型,因此有不同的规范。下表给出了在 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 语言中主要使用两种类型的修饰符。它们是
当使用 unsigned 修饰符时,数字总是正数,而当使用 signed 修饰符时,数字可能是正数或负数。如果未提及修饰符,则默认分配 signed 限定符。当我们事先知道数字将始终为正数时,我们通常使用 unsigned 修饰符。此外,这些修饰符只能与 int 和 char 类型一起使用。
大小修饰符有助于增加或减少数据类型的大小。当使用 short 修饰符时,它会减小数据类型的范围,而 long 修饰符则相反,即增加数据类型的范围。需要注意的重要一点是,这些大小修饰符与 int 数据类型配合得很好,double 只能使用 long。char 和 float 都不使用这些修饰符中的任何一个。
在 C 语言中,数据类型的大小取决于所使用的机器,对于 16 位机器,类型的大小是 2 字节,而对于 32 位或 64 位机器,类型的大小是 4 字节。
数据类型 '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
如果您需要使用任何分数或小数,则必须声明 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
简单来说,'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' 表示“无”或“空”。它与任何其他数据类型(如 '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 告诉编译器不要接受任何参数。