#### 3. 數據類型
**基本的內置類型**
C++ 為程序員提供了種類豐富的內置數據類型和用戶自定義的數據類型。下表列出了七種基本的 C++ 數據類型:
| 類型 | 關鍵字 |
| --- | --- |
| 布爾型 | bool |
| 字符型 | char |
| 整型 | int |
| 浮點型 | float |
| 雙浮點型 | double |
| 無類型 | void |
| 寬字符型 | wchar\_t (wchar\_t 實際上的空間是和 short int 一樣) |
下表顯示了各種變量類型在內存中存儲值時需要占用的內存,以及該類型的變量所能存儲的最大值和最小值。
**注意:** 不同系統會有所差異。
| 類型 | 位 | 范圍 |
| --- | --- | --- |
| char | 1 個字節 | \-128 到 127 或者 0 到 255 |
| unsigned char | 1 個字節 | 0 到 255 |
| signed char | 1 個字節 | \-128 到 127 |
| int | 4 個字節 | \-2147483648 到 2147483647 |
| unsigned int | 4 個字節 | 0 到 4294967295 |
| signed int | 4 個字節 | \-2147483648 到 2147483647 |
| short int | 2 個字節 | \-32768 到 32767 |
| unsigned short int | 2 個字節 | 0 到 65,535 |
| signed short int | 2 個字節 | \-32768 到 32767 |
| long int | 8 個字節 | \-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
| signed long int | 8 個字節 | \-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
| unsigned long int | 8 個字節 | 0 到 18,446,744,073,709,551,615 |
| float | 4 個字節 | 精度型占4個字節(32位)內存空間,+/- 3.4e +/- 38 (~7 個數字) |
| double | 8 個字節 | 雙精度型占8 個字節(64位)內存空間,+/- 1.7e +/- 308 (~15 個數字) |
| long double | 16 個字節 | 長雙精度型 16 個字節(128位)內存空間,可提供18-19位有效數字。 |
| wchar\_t | 2 或 4 個字節 | 1 個寬字符 |
從上表可得知,變量的大小會根據編譯器和所使用的電腦而有所不同。
下面實例會輸出您電腦上各種數據類型的大小。
~~~
void test2() {
println("C++\t\t", "**************基本數據類型 Size ***********\n");
println("bool\t\t", "所占字節數:", sizeof(bool), "\t\t最大值:",
(numeric_limits<bool>::max)(), "\t\t最小值:", (numeric_limits<bool>::min)());
println("char\t\t", "所占字節數:", sizeof(char), "\t\t最大值:",
(numeric_limits<char>::max)(), "\t\t最小值:", (numeric_limits<char>::min)());
println("unsigned char\t\t", "所占字節數:", sizeof(unsigned char), "\t\t最大值:",
(numeric_limits<unsigned char>::max)(), "\t\t最小值:", (numeric_limits<unsigned char>::min)());
println("signed char\t\t", "所占字節數:", sizeof(signed char), "\t\t最大值:",
(numeric_limits<signed char>::max)(), "\t\t最小值:", (numeric_limits<signed char>::min)());
println("int\t\t", "所占字節數:", sizeof(int), "\t\t最大值:",
(numeric_limits<int>::max)(), "\t\t最小值:", (numeric_limits<int>::min)());
println("unsigned int\t\t", "所占字節數:", sizeof(unsigned int), "\t\t最大值:",
(numeric_limits<unsigned int>::max)(), "\t\t最小值:", (numeric_limits<unsigned int>::min)());
println("signed int\t\t", "所占字節數:", sizeof(signed int), "\t\t最大值:",
(numeric_limits<signed int>::max)(), "\t\t最小值:", (numeric_limits<signed int>::min)());
println("short int\t\t", "所占字節數:", sizeof(short int), "\t\t最大值:",
(numeric_limits<short int>::max)(), "\t\t最小值:", (numeric_limits<short int>::min)());
println("unsigned short int\t\t", "所占字節數:", sizeof(unsigned short int), "\t\t最大值:",
(numeric_limits<unsigned short int>::max)(), "\t\t最小值:", (numeric_limits<unsigned short int>::min)());
println("signed short int\t\t", "所占字節數:", sizeof(signed short int), "\t\t最大值:",
(numeric_limits<signed short int>::max)(), "\t\t最小值:", (numeric_limits<signed short int>::min)());
println("long int\t\t", "所占字節數:", sizeof(long int), "\t\t最大值:",
(numeric_limits<long int>::max)(), "\t\t最小值:", (numeric_limits<long int>::min)());
println("signed long int\t\t", "所占字節數:", sizeof(signed long int), "\t\t最大值:",
(numeric_limits<signed long int>::max)(), "\t\t最小值:", (numeric_limits<signed long int>::min)());
println("unsigned long int\t\t", "所占字節數:", sizeof(unsigned long int), "\t\t最大值:",
(numeric_limits<unsigned long int>::max)(), "\t\t最小值:", (numeric_limits<unsigned long int>::min)());
println("float\t\t", "所占字節數:", sizeof(float), "\t\t最大值:",
(numeric_limits<float>::max)(), "\t\t最小值:", (numeric_limits<float>::min)());
println("double\t\t", "所占字節數:", sizeof(double), "\t\t最大值:",
(numeric_limits<double>::max)(), "\t\t最小值:", (numeric_limits<double>::min)());
println("long double\t\t", "所占字節數:", sizeof(long double), "\t\t最大值:",
(numeric_limits<long double>::max)(), "\t\t最小值:", (numeric_limits<long double>::min)());
println("wchar_t\t\t", "所占字節數:", sizeof(wchar_t), "\t\t最大值:",
(numeric_limits<wchar_t>::max)(), "\t\t最小值:", (numeric_limits<wchar_t>::min)());
}
~~~
輸出:
> ~~~
> /**
> * bool 所占字節數:1 最大值:1 最小值:0
> * char 所占字節數:1 最大值:127 最小值:-128
> * unsigned char 所占字節數:1 最大值:255 最小值:0
> * signed char 所占字節數:1 最大值:127 最小值:-128
> * int 所占字節數:4 最大值:2147483647 最小值:-2147483648
> * unsigned int 所占字節數:4 最大值:-1 最小值:0
> * signed int 所占字節數:4 最大值:2147483647 最小值:-2147483648
> * short int 所占字節數:2 最大值:32767 最小值:-32768
> * unsigned short int 所占字節數:2 最大值:65535 最小值:0
> * signed short int 所占字節數:2 最大值:32767 最小值:-32768
> * long int 所占字節數:8 最大值:-1 最小值:0
> * signed long int 所占字節數:8 最大值:-1 最小值:0
> * unsigned long int 所占字節數:8 最大值:-1 最小值:0
> * float 所占字節數:4 最大值:-2147483648 最小值:0
> * double 所占字節數:8 最大值:-2147483648 最小值:0
> * long double 所占字節數:16 最大值:-2147483648 最小值:0
> * wchar_t 所占字節數:4 最大值:2147483647 最小值:-2147483648
> */
> ~~~
**typedef 聲明**
您可以使用 **typedef** 為一個已有的類型取一個新的名字。下面是使用 typedef 定義一個新類型的語法:
~~~
//格式: typedef type newname;
//例子
typedef int feet;
~~~
現在,下面的聲明是完全合法的,它創建了一個整型變量 distance:
~~~
feet distance;
~~~
**枚舉類型**
枚舉類型(enumeration)是C++中的一種派生數據類型,它是由用戶定義的若干枚舉常量的集合。
如果一個變量只有幾種可能的值,可以定義為枚舉(enumeration)類型。所謂"枚舉"是指將變量的值一一列舉出來,變量的值只能在列舉出來的值的范圍內。
創建枚舉,需要使用關鍵字 **enum** 跟 Java 語法差不多。枚舉類型的一般形式為:
~~~
enum 枚舉名{
標識符[=整型常數],
標識符[=整型常數],
...
標識符[=整型常數]
} 枚舉變量;
~~~
如果枚舉沒有初始化, 即省掉"=整型常數"時, 則從第一個標識符開始。
例如,下面的代碼定義了一個顏色枚舉,變量 c 的類型為 color。最后,c 被賦值為 "blue"。
~~~
enum color { red, green, blue } c;
c = blue;
~~~
默認情況下,第一個名稱的值為 0,第二個名稱的值為 1,第三個名稱的值為 2,以此類推。但是,您也可以給名稱賦予一個特殊的值,只需要添加一個初始值即可。例如,在下面的枚舉中,**green** 的值為 5。
~~~
enum color { red, green=5, blue };
~~~
在這里,**blue** 的值為 6,因為默認情況下,每個名稱都會比它前面一個名稱大 1,但 red 的值依然為 0。
- 前言
- JNI基礎知識
- C語言知識點總結
- ①基本語法
- ②數據類型
- 枚舉類型
- 自定義類型(類型定義)
- ③格式化輸入輸出
- printf函數
- scanf函數
- 編程規范
- ④變量和常量
- 局部變量和外部變量
- ⑤類型轉換
- ⑥運算符
- ⑦結構語句
- 1、分支結構(選擇語句)
- 2、循環結構
- 退出循環
- break語句
- continue語句
- goto語句
- ⑧函數
- 函數的定義和調用
- 參數
- 函數的返回值
- 遞歸函數
- 零起點學通C語言摘要
- 內部函數和外部函數
- 變量存儲類別
- ⑨數組
- 指針
- 結構體
- 聯合體(共用體)
- 預處理器
- 預處理器的工作原理
- 預處理指令
- 宏定義
- 簡單的宏
- 帶參數的宏
- 預定義宏
- 文件包含
- 條件編譯
- 內存中的數據
- C語言讀文件和寫文件
- JNI知識點總結
- 前情回顧
- JNI規范
- jni開發
- jni開發中常見的錯誤
- JNI實戰演練
- C++(CPP)在Android開發中的應用
- 掘金網友總結的音視頻開發知識
- 音視頻學習一、C 語言入門
- 1.程序結構
- 2. 基本語法
- 3. 數據類型
- 4. 變量
- 5. 常量
- 6. 存儲類型關鍵字
- 7. 運算符
- 8. 判斷
- 9. 循環
- 10. 函數
- 11. 作用域規則
- 12. 數組
- 13. 枚舉
- 14. 指針
- 15. 函數指針與回調函數
- 16. 字符串
- 17. 結構體
- 18. 共用體
- 19. typedef
- 20. 輸入 & 輸出
- 21.文件讀寫
- 22. 預處理器
- 23.頭文件
- 24. 強制類型轉換
- 25. 錯誤處理
- 26. 遞歸
- 27. 可變參數
- 28. 內存管理
- 29. 命令行參數
- 總結
- 音視頻學習二 、C++ 語言入門
- 1. 基本語法
- 2. C++ 關鍵字
- 3. 數據類型
- 4. 變量類型
- 5. 變量作用域
- 6. 常量
- 7. 修飾符類型
- 8. 存儲類
- 9. 運算符
- 10. 循環
- 11. 判斷
- 12. 函數
- 13. 數學運算
- 14. 數組
- 15. 字符串
- 16. 指針
- 17. 引用
- 18. 日期 & 時間
- 19. 輸入輸出
- 20. 數據結構
- 21. 類 & 對象
- 22. 繼承
- 23. 重載運算符和重載函數
- 24. 多態
- 25. 數據封裝
- 26. 接口(抽象類)
- 27. 文件和流
- 28. 異常處理
- 29. 動態內存
- 30. 命名空間
- 31. 預處理器
- 32. 多線程
- 總結
- 音視頻學習 (三) JNI 從入門到掌握
- 音視頻學習 (四) 交叉編譯動態庫、靜態庫的入門學習
- 音視頻學習 (五) Shell 腳本入門
- 音視頻學習 (六) 一鍵編譯 32/64 位 FFmpeg 4.2.2
- 音視頻學習 (七) 掌握音頻基礎知識并使用 AudioTrack、OpenSL ES 渲染 PCM 數據
- 音視頻學習 (八) 掌握視頻基礎知識并使用 OpenGL ES 2.0 渲染 YUV 數據
- 音視頻學習 (九) 從 0 ~ 1 開發一款 Android 端播放器(支持多協議網絡拉流/本地文件)
- 音視頻學習 (十) 基于 Nginx 搭建(rtmp、http)直播服務器
- 音視頻學習 (十一) Android 端實現 rtmp 推流
- 音視頻學習 (十二) 基于 FFmpeg + OpenSLES 實現音頻萬能播放器
- 音視頻學習 (十三) Android 中通過 FFmpeg 命令對音視頻編輯處理(已開源)