C++ 笔记(04)— 数据类型(各类型占用内存 sizeof、typedef 声明)
編程語言中變量保存的是它所存儲(chǔ)值的內(nèi)存位置。也就是說在創(chuàng)建一個(gè)變量時(shí),就會(huì)在內(nèi)存中開辟一些空間。操作系統(tǒng)會(huì)根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲(chǔ)什么。
1. 基本數(shù)據(jù)類型
| 類型 | 關(guān)鍵字 |
|---|---|
| 布爾型 | bool |
| 字符型 | char |
| 整型 | int |
| 浮點(diǎn)型 | float |
| 雙浮點(diǎn)型 | double |
| 無類型 | void |
| 寬字符型 | wchar_t |
其實(shí) wchar_t 定義如下:
typedef short int wchar_t;
也就是說 wchar_t 實(shí)際上的空間是和 short int 一樣。
一些基本類型可以使用一個(gè)或多個(gè)類型修飾符進(jìn)行修飾:
signedunsignedshortlong
C++11 引入了固定寬度的整型,讓您能夠以位為單位指定整數(shù)的寬度。這些類型為 int8_t 和 unit8_t ,分別用于存儲(chǔ) 8 位的有符號和無符號整數(shù)。您還可能使用 16 位、32 位和 64位的整型,它們?yōu)?int16_t 、 uint16_t 、 int32_t 、 uint32_t 、 int64_t 和 uint64_t 。要使用這些類型,必須包含頭文件 <cstdint> 。
2. 類型占用內(nèi)存
變量長度指的是程序員聲明變量時(shí),編譯器將預(yù)留多少內(nèi)存,用于存儲(chǔ)賦給該變量的數(shù)據(jù)。變量的長度隨類型而異, C++ 提供了一個(gè)方便的運(yùn)算符 — sizeof ,可用于確定變量的長度(單位為字節(jié))或類型。
下表顯示了各種變量類型在內(nèi)存中存儲(chǔ)值時(shí)需要占用的內(nèi)存,以及該類型的變量所能存儲(chǔ)的最大值和最小值。
| 類型 | 位 | 范圍 |
|---|---|---|
| char | 1 個(gè)字節(jié) | -128 到 127 或者 0 到 255 |
| unsigned char | 1 個(gè)字節(jié) | 0 到 255 |
| signed char | 1 個(gè)字節(jié) | -128 到 127 |
| int | 4 個(gè)字節(jié) | -2147483648 到 2147483647 |
| unsigned int | 4 個(gè)字節(jié) | 0 到 4294967295 |
| signed int | 4 個(gè)字節(jié) | -2147483648 到 2147483647 |
| short int | 2 個(gè)字節(jié) | -32768 到 32767 |
| unsigned short int | 2 個(gè)字節(jié) | 0 到 65,535 |
| signed short int | 2 個(gè)字節(jié) | -32768 到 32767 |
| long int | 8 個(gè)字節(jié) | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
| signed long int | 8 個(gè)字節(jié) | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
| unsigned long int | 8 個(gè)字節(jié) | 0 到 18,446,744,073,709,551,615 |
| float | 4 個(gè)字節(jié) | 精度型占4個(gè)字節(jié)(32位)內(nèi)存空間,+/- 3.4e +/- 38 (~7 個(gè)數(shù)字) |
| double | 8 個(gè)字節(jié) | 雙精度型占8 個(gè)字節(jié)(64位)內(nèi)存空間,+/- 1.7e +/- 308 (~15 個(gè)數(shù)字) |
| long double | 16 個(gè)字節(jié) | 長雙精度型 16 個(gè)字節(jié)(128位)內(nèi)存空間,可提供18-19位有效數(shù)字。 |
| wchar_t | 2 或 4 字節(jié) | 1 個(gè)寬字符 |
| bool | 1 字節(jié) | true/false |
注意:不同系統(tǒng)會(huì)有所差異,一字節(jié)為 8 位。變量的大小會(huì)根據(jù)編譯器和所使用的電腦而有所不同。
示例代碼如下:
#include <iostream>
using namespace std;int main()
{cout << "type:\t\t" << "******************size******************" <<endl;cout << "bool 所占字節(jié)數(shù)是:"<< sizeof(bool) << endl;cout << "char 所占字節(jié)數(shù)是:"<< sizeof(char) << endl;cout << "unsigned char 所占字節(jié)數(shù)是:"<< sizeof(unsigned char) << endl;cout << "signed char 所占字節(jié)數(shù)是:"<< sizeof(signed char) << endl;cout << "==========================================================="<<endl;cout << "int 所占字節(jié)數(shù)是:"<< sizeof(int) << endl;cout << "unsigned int 所占字節(jié)數(shù)是:"<< sizeof(unsigned int) << endl;cout << "signed int 所占字節(jié)數(shù)是:"<< sizeof(signed int) << endl;cout << "==========================================================="<<endl;cout << "short int 所占字節(jié)數(shù)是:"<< sizeof(short int) << endl;cout << "unsigned short int 所占字節(jié)數(shù)是:"<< sizeof(unsigned short int) << endl;cout << "signed short int 所占字節(jié)數(shù)是:"<< sizeof(signed short int) << endl;cout << "==========================================================="<<endl;cout << "long int 所占字節(jié)數(shù)是:"<< sizeof(long int) << endl;cout << "unsigned long int 所占字節(jié)數(shù)是:"<< sizeof(unsigned long int) << endl;cout << "signed long int 所占字節(jié)數(shù)是:"<< sizeof(signed long int) << endl;cout << "==========================================================="<<endl;cout << "float 所占字節(jié)數(shù)是:"<< sizeof(float) << endl;cout << "==========================================================="<<endl;cout << "double 所占字節(jié)數(shù)是:"<< sizeof(double) << endl;cout << "long double 所占字節(jié)數(shù)是:"<< sizeof(long double) << endl;cout << "==========================================================="<<endl;cout << "wchar_t 所占字節(jié)數(shù)是:"<< sizeof(wchar_t) << endl;cout << "type:\t\t" << "******************size******************" <<endl;return 0;
}
輸出結(jié)果如下:
wohu@wohu:~/C++$ ./a.out
type: ******************size******************
bool 所占字節(jié)數(shù)是:1
char 所占字節(jié)數(shù)是:1
unsigned char 所占字節(jié)數(shù)是:1
signed char 所占字節(jié)數(shù)是:1
===========================================================
int 所占字節(jié)數(shù)是:4
unsigned int 所占字節(jié)數(shù)是:4
signed int 所占字節(jié)數(shù)是:4
===========================================================
short int 所占字節(jié)數(shù)是:2
unsigned short int 所占字節(jié)數(shù)是:2
signed short int 所占字節(jié)數(shù)是:2
===========================================================
long int 所占字節(jié)數(shù)是:8
unsigned long int 所占字節(jié)數(shù)是:8
signed long int 所占字節(jié)數(shù)是:8
===========================================================
float 所占字節(jié)數(shù)是:4
===========================================================
double 所占字節(jié)數(shù)是:8
long double 所占字節(jié)數(shù)是:16
===========================================================
wchar_t 所占字節(jié)數(shù)是:4
type: ******************size******************
wohu@wohu:~/C++$
3. typedef 聲明
使用 typedef 為一個(gè)已有的類型取一個(gè)新的名字。下面是使用 typedef 定義一個(gè)新類型的語法:
typedef type newname;
使用方法:
typedef int INT;
INT a = 5; // 聲明定義一個(gè)變量
關(guān)于 typedef 的幾點(diǎn)說明:
typedef可以聲明各種類型名,但不能用來定義變量。用typedef可以聲明數(shù)組類型、字符串類型,結(jié)構(gòu)體類型。- 用
typedef只是對已經(jīng)存在的類型增加一個(gè)類型名,而沒有創(chuàng)造新的類型。 - 當(dāng)在不同源文件中用到同一類型數(shù)據(jù)(尤其是像數(shù)組、指針、結(jié)構(gòu)體、共用體等類型數(shù)據(jù))時(shí),常用
typedef聲明一些數(shù)據(jù)類型,把它們單獨(dú)放在一個(gè)頭文件中,然后在需要用到它們的文件中用#include命令把它們包含進(jìn)來,以提高編程效率。 - 使用
typedef有利于程序的通用與移植。有時(shí)程序會(huì)依賴于硬件特性,用typedef便于移植。
總結(jié)
以上是生活随笔為你收集整理的C++ 笔记(04)— 数据类型(各类型占用内存 sizeof、typedef 声明)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ 笔记(03)— 命名空间(概念、
- 下一篇: 豪沃驾驶室里面驾驶台上的开关按钮都是干什