c語言中資料型別用於申明變數或函式。型別是對資料分配儲存單元的安排,包括儲存單元的長度(占有位元組)以及資料的儲存形式。
c語言中資料型別分為以下幾種:
型別描述
基本型別
屬於算術型別,包括整數型別和浮點型別
列舉型別(enum)
屬於算術型別,程式中使用者定義的整數型別
空型別(void)
表示沒有值可用
派生型別
包括:指標型別、陣列型別、結構體型別、共用體型別、函式型別
其中,算術型別(arithmetic type)和指標型別統稱為純量型別(scalar type),陣列型別和結構體型別統稱為組合型別(aggregate type),函式型別用於定義函式的返回值和引數的型別。
以下是在64位系統下整數型別的詳情:
型別儲存大小
值範圍描述
(signed) char(有符號字元型)
1byte
-128~127
有符號8位整數
unsigned char (無符號字元型)
1byte
0~255
無符號8位整數
(signed)short(有符號短整型)
2byte
-32768~32767
有符號16位整數
unsigned short(無符號短整型)
2byte
0~65535
無符號16位整數
(signed)int(有符號基本整形)
4byte
-2147483648~2147483647
有符號32位整數
unsigned int(無符號基本整型)
4byte
0~4294967295
無符號32位整數
(signed)long long int(有符號雙長整型)
8byte
-9223372036854775808~9223372036854775807
有符號64位整數
unsigned long long int (無符號雙長整型)
8byte
0~18446744073709551615
無符號64位整數
_bool(布林型)
1byte
1(true),0(false)
8位整數
在stdint.h和stdbool.h中對精確寬度整數型別及其大小限制有下列定義:
typedef signed char int8_t;
typedef unsigned char uint8_t;
typedef short int16_t;
typedef unsigned short uint16_t;
typedef int int32_t;
typedef unsigned uint32_t;
typedef long long int64_t;
typedef unsigned long long uint64_t;
typedef bool _bool
typedef true 1
typedef false 0
#define int8_min (-128)
#define int16_min (-32768)
#define int32_min (-3247483647 - 1)
#define int64_min (-9223372036854775807ll - 1)
#define int8_max 127
#define int16_max 32767
#define int32_max 2147483647
#define int64_max 9223372036854775807ll
#define uint8_max 0xff /*255u*/
#define uint16_max 0xffff /*65535*/
#define uint32_max 0xffffffff /*4294967295u*/
#define uint64_max 0xffffffffffffffff /*18446744073709551615ull*/
浮點型別詳情:
型別位元組數
取值範圍(絕對值)
有效位數
float
41.175494e-38~3.402823e+38
6double
82.225074e-308~1.797693e+308
15long double
163.362103e-4932~1.189731e+4932
18 這些資訊在標頭檔案float.h中均作出了定義。給出獲取型別位元組數、取值範圍(絕對值)、有效位數:
int main(int arg,char* argv)
執行結果:
單精度浮點型儲存位元組大小:4
單精度浮點型取值範圍(絕對值):1.175494e-38~3.402823e+38
單精度浮點型有效位數:6
雙精度浮點型儲存位元組大小:8
雙精度浮點型取值範圍(絕對值):2.225074e-308~1.797693e+308
雙精度浮點型有效位數:15
長雙精度型儲存位元組大小:16
長雙精度型取值範圍(絕對值):3.362103e-4932~1.189731e+4932
長雙精度型有效位數:18
c99中提供了複數支援,用兩個兩同的浮點型別分別表示複數的實部和虛部,例:float _complex = float +float*i.並可以分別通過creal(float _complex)和cimag(float _complex)函式獲取該複數的實部和虛部。具體定義於標頭檔案complex.h中。
printf("單精度浮點型複數位元組大小:%lu\n",sizeof(float _complex));
printf("雙精度浮點型複數位元組大小:%lu\n",sizeof(double _complex));
printf("長雙精度型複數位元組大小:%lu\n",sizeof(long double _complex));
執行結果:
單精度浮點型複數位元組大小:8
雙精度浮點型複數位元組大小:16
長雙精度型複數位元組大小:32
所謂列舉是指將變數的值一一枚舉出來,變數指限於列舉出來的值的範圍內取值。
enum color;
enum color red = red;
printf("red = %d\n",red);
enum color blue = blue;
printf("blue = %d\n",blue);
enum color black = black;
printf("black = %d\n",black);
enum color yellew = yellew;
printf("yellew = %d\n",yellew);
執行結果:
red = 0
blue = 1
black = 5
yellew = 6
void型別指沒有可用值,一般出現於下列三種情況:
型別函式返回為空
不返回值的函式的返回型別為空,例如:void exit()
函式引數為空
不帶引數的函式,可以接收乙個void,例如:int rand(void)
指標指向為空
C 資料型別
一般來說,計算機要儲存和處理不同的資料型別,在c 中有基本的資料型別和使用者自定義資料型別以及引用型資料。我們先學習下基本的資料型別,也就是系統自帶的資料型別。每種資料型別都要佔據系統記憶體的一定空間,例如c 中的整數int 乙個整數佔4個位元組,也就是32位 計算機是用0和1二進位制來表示和處理資...
c 資料型別
型別可分為 值型別,引用型別 值型別 直接存放真正的資料,值型別都有固定的長度,值型別的變數都儲存在 堆疊 stack 上。作為值型別的變數,每個都有自己的資料,因此對乙個變數的操作不會影響其他變數。引用型別 儲存讀資料的記憶體位址的引用,位於受管制的堆 heap 上作為引用型別的變數可以引 用同一...
C 資料型別
bool system.boolean 1位元組 byte system.byte 1位元組無符號 sbyte system.sbyte 1位元組有符號 short system.int16 2位元組 ushort system.uint16 2位元組 int system.int32 4位元組 u...