---
title: Data Types in C
localeTitle: C中的数据类型
---
# C中的数据类型

在C中存储数据有几种不同的方式，它们彼此都是唯一的。可以存储信息的数据类型称为数据类型。与其他语言相比，C对数据类型的宽容度要低得多。因此，确保您了解现有数据类型，其能力和限制非常重要。

C的数据类型的一个怪癖是它们完全依赖于您运行代码的硬件。您的笔记本电脑上的`int`将小于超级计算机上的`int` ，因此了解您正在处理的硬件的局限性非常重要。这也是数据类型定义为最小值的原因 - 正如您将了解的那样， `int`值至少为-32767到32767：在某些机器上，它将能够存储更多的值。

我们可以将其分为两类：整数和浮点数。整数是整数。它们可以是正数，负数或零。像-321,497,19345和-976812这样的数字都是完全有效的整数，但4.5不是因为4.5不是整数。

浮点数是带小数的数字。与整数一样，-321,497,19345和-976812都是有效的，但现在4.5,0.0004，-324.984和其他非整数也是有效的。

C允许我们在数据类型的几个不同选项之间进行选择，因为它们都以不同的方式存储在计算机上。因此，重要的是要了解每种数据类型的能力和限制，以选择最合适的数据类型。

## 整数数据类型

#### 字符： `char`

`char`包含字符，例如字母，标点符号和空格。在计算机中，字符存储为数字，因此`char`包含表示字符的整数值。实际的翻译由ASCII标准描述。 [这是](http://www.asciitable.com/)一个方便的查找表。

与C中的所有其他数据类型一样，实际大小取决于您正在处理的硬件。至少，它至少是8位，因此您将至少有0到127.或者，您可以使用`signed char`来获得至少-128到127。

#### 标准整数： `int`

单个`int`占用的内存量取决于硬件。但是，您可以期望`int`大小至少为16位。这意味着它可以存储-32,768到32,767或更多的值，具体取决于硬件。

与所有其他数据类型一样，可以使用`unsigned`变体。 `unsigned int`可以是正数和零但不是负数，因此它可以存储0到65,535或更多的值，具体取决于硬件。

#### 短整数： `short`

这不经常使用，但知道它存在是很好的。与int类似，它可以存储-32768到32767.然而，与int不同，这是它的能力范围。你可以使用`short`任何地方，你可以使用`int` 。

#### 长整型： `long`

`long`数据类型存储整数，如`int` ，但以更多内存为代价提供更广泛的值。长存储至少32位，其范围为-2,147,483,648到2,147,483,647。或者，使用`unsigned long`作为0到4,294,967,295的范围。

#### long long： `long long`

对于几乎每个应用程序来说， `long long`数据类型都是过度的，但无论如何C都会让你使用它。它能够存储至少-9,223,372,036,854,775,807至9,223,372,036,854,775,807。或者，使用`unsigned long long`获得更多的矫枉过正，这将给你至少0到18,446,744,073,709,551,615。

## 浮点数数据类型

#### 基本浮点数： `float`

`float`至少需要32位来存储，但是从1.2E-38到3.4E + 38给出了6位小数。

#### 双精度型： `double`

`double`占用浮点数的两倍（所以至少64位）。作为回报，double可以提供从2.3E-308到1.7E + 308的15位小数。

#### 精度更高的双精度型： `long double`

`long double`至少需要80位。因此，我们可以从3.4E-4932到1.1E + 4932获得19位小数。

## 选择正确的数据类型

C选择数据类型，使我们对我们这样做的方式非常具体和有意。这为您提供了很多代码的强大功能，但选择正确的代码非常重要。

通常，您应该为您的任务选择最低要求。如果你知道你将从1到10整数计算，你不需要很长时间就不需要加倍。如果您知道永远不会有负值，请查看使用数据类型的`unsigned`变体。通过提供此功能而不是自动执行，C能够生成非常轻便和高效的代码。但是，作为程序员，您需要了解能力和限制，并相应地进行选择。

我们可以使用sizeof（）运算符来检查变量的大小。有关各种数据类型的用法，请参阅以下C程序：

```c
#include <stdio.h> 
 
 int main() 
 { 
    int a = 1; 
 
    char b ='G'; 
 
    double c = 3.14; 
 
    printf("Hello World!\n"); 
 
    //printing the variables defined above along with their sizes 
    printf("Hello! I am a character. My value is %c and " 
           "my size is %lu byte.\n", b,sizeof(char)); 
    //can use sizeof(b) above as well 
 
    printf("Hello! I am an integer. My value is %d and " 
           "my size is %lu  bytes.\n", a,sizeof(int)); 
    //can use sizeof(a) above as well 
 
    printf("Hello! I am a double floating point variable." 
           " My value is %lf and my size is %lu bytes.\n",c,sizeof(double)); 
    //can use sizeof(c) above as well 
 
    printf("Bye! See you soon. :)\n"); 
    return 0; 
 } 
```

## 输出：

你好，世界！  
你好！我是一个角色。我的值是G，我的大小是1个字节。  
你好！我是一个整数。我的值是1，我的大小是4个字节。  
你好！我是一个双浮点变量。我的值是3.140000，我的大小是8个字节。  
再见！再见。 :)

## 空类型

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

#### 1.函数返回void

C中有各种函数不返回任何值，或者可以说它们返回void。没有返回值的函数的返回类型为void。例如， `void exit (int status);`

#### 2.函数参数为void

C中有各种不接受任何参数的功能。没有参数的函数可以接受void。例如， `int rand(void);`

#### 3.指示无效

void \*类型的指针表示对象的地址，但不表示其类型。例如，内存分配函数`void *malloc( size_t size);`返回一个指向void的指针，该指针可以转换为任何数据类型。

# 在你继续之前......

## 回顾

*   C数据类型的实际能力取决于硬件。因此，为数据类型定义了最小大小。
*   浮点数将允许您有小数，而整数不会。
*   我们有一些整数值的选项：
*   char，专为字符设计但存储数字
*   int，这是标准的整数数据类型
*   short，这是一种不太常用但仍然可用的整数数据类型
*   long，它提供了大范围的整数值
*   long long，它给出了一个过度的整数值范围，但有时仍然有用。
*   我们还有一些浮点值的选项：
*   float是基本浮点值，存储6位小数
*   double占用内存的两倍，并给出15位小数
*   long double占用更多内存并提供19位小数
*   选择正确的数据类型非常重要，它使程序员能够以较低的级别对程序进行大量控制。
