# C 數據類型
在 C 語言中,數據類型指的是用于聲明不同類型的變量或函數的一個廣泛的系統。變量的類型決定了變量存儲占用的空間,以及如何解釋存儲的位模式。
C 中的類型可分為以下幾種:
| 類型 | 描述 |
| --- | --- |
| **基本類型:** | 它們是算術類型,包括兩種類型:整數類型和浮點類型。 |
| **枚舉類型:** | 它們也是算術類型,被用來定義在程序中只能賦予其一定的離散整數值的變量。 |
| **void 類型:** | 類型說明符 _void_ 表明沒有可用的值。 |
| **派生類型:** | 它們包括:指針類型、數組類型、結構類型、共用體類型和函數類型。 |
數組類型和結構類型統稱為聚合類型。函數的類型指的是函數返回值的類型。在本章節接下來的部分我們將介紹基本類型,其他幾種類型會在后邊幾個章節中進行講解。
## 整數類型
下表列出了關于標準整數類型的存儲大小和值范圍的細節:
| 類型 | 存儲大小 | 值范圍 |
| --- | --- | --- |
| char | 1 byte | -128 到 127 或 0 到 255 |
| unsigned char | 1 byte | 0 到 255 |
| signed char | 1 byte | -128 到 127 |
| int | 2 或 4 bytes | -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 |
| unsigned int | 2 或 4 bytes | 0 到 65,535 或 0 到 4,294,967,295 |
| short | 2 bytes | -32,768 到 32,767 |
| unsigned short | 2 bytes | 0 到 65,535 |
| long | 4 bytes | -2,147,483,648 到 2,147,483,647 |
| unsigned long | 4 bytes | 0 到 4,294,967,295 |
為了得到某個類型或某個變量在特定平臺上的準確大小,您可以使用 **sizeof** 運算符。表達式 _sizeof(type)_ 得到對象或類型的存儲字節大小。下面的實例演示了獲取 int 類型的大小:
```
#include <stdio.h>
#include <limits.h>
int main()
{
printf("Storage size for int : %d \n", sizeof(int));
return 0;
}
```
當您在 Linux 上編譯并執行上面的程序時,它會產生下列結果:
```
Storage size for int : 4
```
## 浮點類型
下表列出了關于標準浮點類型的存儲大小、值范圍和精度的細節:
| 類型 | 存儲大小 | 值范圍 | 精度 |
| --- | --- | --- | --- |
| float | 4 byte | 1.2E-38 到 3.4E+38 | 6 位小數 |
| double | 8 byte | 2.3E-308 到 1.7E+308 | 15 位小數 |
| long double | 10 byte | 3.4E-4932 到 1.1E+4932 | 19 位小數 |
頭文件 float.h 定義了宏,在程序中可以使用這些值和其他有關實數二進制表示的細節。下面的實例將輸出浮點類型占用的存儲空間以及它的范圍值:
```
#include <stdio.h>
#include <float.h>
int main()
{
printf("Storage size for float : %d \n", sizeof(float));
printf("Minimum float positive value: %E\n", FLT_MIN );
printf("Maximum float positive value: %E\n", FLT_MAX );
printf("Precision value: %d\n", FLT_DIG );
return 0;
}
```
當您在 Linux 上編譯并執行上面的程序時,它會產生下列結果:
```
Storage size for float : 4
Minimum float positive value: 1.175494E-38
Maximum float positive value: 3.402823E+38
Precision value: 6
```
## void 類型
void 類型指定沒有可用的值。它通常用于以下三種情況下:
| 類型 | 描述 |
| --- | --- |
| **函數返回為空** | C 中有各種函數都不返回值,或者您可以說它們返回空。不返回值的函數的返回類型為空。例如 **void exit (int status);** |
| **函數參數為空** | C 中有各種函數不接受任何參數。不帶參數的函數可以接受一個 void。例如 **int rand(void);** |
| **指針指向 void** | 類型為 void * 的指針代表對象的地址,而不是類型。例如,內存分配函數 **void *malloc( size_t size );** 返回指向 void 的指針,可以轉換為任何數據類型。 |
如果現在您還是無法完全理解 void 類型,不用太擔心,在后續的章節中我們將會詳細講解這些概念。
- C語言教程
- C 簡介
- C 環境設置
- C 程序結構
- C 基本語法
- C 數據類型
- C 變量
- C 常量
- C 存儲類
- C 運算符
- C 判斷
- C 循環
- C 函數
- C 作用域規則
- C 數組
- C 指針
- C 字符串
- C 結構體
- C 共用體
- C 位域
- C typedef
- C 輸入 & 輸出
- C 文件讀寫
- C 預處理器
- C 頭文件
- C 強制類型轉換
- C 錯誤處理
- C 遞歸
- C 可變參數
- C 內存管理
- C 命令行參數
- C語言參考
- C 標準庫 - <assert.h>
- C 庫宏 - assert()
- C 標準庫 - <ctype.h>
- C 庫函數 - isalnum()
- C 庫函數 - isalpha()
- C 庫函數 - iscntrl()
- C 庫函數 - isdigit()
- C 庫函數 - isgraph()
- C 庫函數 - islower()
- C 庫函數 - isprint()
- C 庫函數 - ispunct()
- C 庫函數 - isspace()
- C 庫函數 - isupper()
- C 庫函數 - isxdigit()
- C 標準庫 - <errno.h>
- C 庫宏 - errno
- C 庫宏 - EDOM
- C 庫宏 - ERANGE
- C 標準庫 - <float.h>
- C 標準庫 - <limits.h>
- C 標準庫 - <locale.h>
- C 庫函數 - setlocale()
- C 庫函數 - localeconv()
- C 標準庫 - <math.h>
- C 庫函數 - acos()
- C 庫函數 - asin()
- C 庫函數 - atan()
- C 庫函數 - atan2()
- C 庫函數 - cos()
- C 庫函數 - cosh()
- C 庫函數 - sin()
- C 庫函數 - sinh()
- C 庫函數 - tanh()
- C 庫函數 - exp()
- C 庫函數 - frexp()
- C 庫函數 - ldexp()
- C 庫函數 - log()
- C 庫函數 - log10()
- C 庫函數 - modf()
- C 庫函數 - pow()
- C 庫函數 - sqrt()
- C 庫函數 - ceil()
- C 庫函數 - fabs()
- C 庫函數 - floor()
- C 庫函數 - fmod()
- C 標準庫 - <setjmp.h>
- C 庫宏 - setjmp()
- C 庫函數 - longjmp()
- C 標準庫 - <signal.h>
- C 庫函數 - signal()
- C 庫函數 - raise()
- C 標準庫 - <stdarg.h>
- C 庫宏 - va_start()
- C 庫宏 - va_arg()
- C 庫宏 - va_end()
- C 標準庫 - <stddef.h>
- C 庫宏 - NULL
- C 庫宏 - offsetof()
- C 標準庫 - <stdio.h>
- C 庫函數 - fclose()
- C 庫函數 - clearerr()
- C 庫函數 - feof()
- C 庫函數 - ferror()
- C 庫函數 - fflush()
- C 庫函數 - fgetpos()
- C 庫函數 - fopen()
- C 庫函數 - fread()
- C 庫函數 - freopen()
- C 庫函數 - fseek()
- C 庫函數 - fsetpos()
- C 庫函數 - ftell()
- C 庫函數 - fwrite()
- C 庫函數 - remove()
- C 庫函數 - rename()
- C 庫函數 - rewind()
- C 庫函數 - setbuf()
- C 庫函數 - tmpfile()
- C 庫函數 - tmpnam()
- C 庫函數 - fprintf()
- C 庫函數 - printf()
- C 庫函數 - sprintf()
- C 庫函數 - vfprintf()
- C 庫函數 - vprintf()
- C 庫函數 - vsprintf()
- C 庫函數 - fscanf()
- C 庫函數 - scanf()
- C 庫函數 - sscanf()
- C 庫函數 - fgetc()
- C 庫函數 - fgets()
- C 庫函數 - fputc()
- C 庫函數 - fputs()
- C 庫函數 - getc()
- C 庫函數 - getchar()
- C 庫函數 - gets()
- C 庫函數 - putc()
- C 庫函數 - putchar()
- C 庫函數 - puts()
- C 庫函數 - ungetc()
- C 庫函數 - perror()
- C 標準庫 - <stdlib.h>
- C 庫函數 - atof()
- C 庫函數 - atoi()
- C 庫函數 - atol()
- C 庫函數 - strtod()
- C 庫函數 - strtol()
- C 庫函數 - strtoul()
- C 庫函數 - calloc()
- C 庫函數 - free()
- C 庫函數 - malloc()
- C 庫函數 - realloc()
- C 庫函數 - abort()
- C 庫函數 - atexit()
- C 庫函數 - exit()
- C 庫函數 - getenv()
- C 庫函數 - system()
- C 庫函數 - bsearch()
- C 庫函數 - qsort()
- C 庫函數 - abs()
- C 庫函數 - div()
- C 庫函數 - labs()
- C 庫函數 - ldiv()
- C 庫函數 - rand()
- C 庫函數 - srand()
- C 庫函數 - mblen()
- C 庫函數 - mbstowcs()
- C 庫函數 - mbtowc()
- C 庫函數 - wcstombs()
- C 庫函數 - wctomb()
- C 標準庫 - <string.h>
- C 庫函數 - memchr()
- C 庫函數 - memcmp()
- C 庫函數 - memcpy()
- C 庫函數 - memmove()
- C 庫函數 - memset()
- C 庫函數 - strcat()
- C 庫函數 - strncat()
- C 庫函數 - strchr()
- C 庫函數 - strcmp()
- C 庫函數 - strncmp()
- C 庫函數 - strcoll()
- C 庫函數 - strcpy()
- C 庫函數 - strncpy()
- C 庫函數 - strcspn()
- C 庫函數 - strerror()
- C 庫函數 - strlen()
- C 庫函數 - strpbrk()
- C 庫函數 - strrchr()
- C 庫函數 - strspn()
- C 庫函數 - strstr()
- C 庫函數 - strtok()
- C 庫函數 - strxfrm()
- C 標準庫 - <time.h>
- C 庫函數 - asctime()
- C 庫函數 - clock()
- C 庫函數 - ctime()
- C 庫函數 - difftime()
- C 庫函數 - gmtime()
- C 庫函數 - localtime()
- C 庫函數 - mktime()
- C 庫函數 - strftime()
- C 庫函數 - time()
- 免責聲明