最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析C++ 數(shù)據(jù)類型

 更新時間:2020年08月24日 09:44:16   作者:Dabelv  
這篇文章主要介紹了C++ 數(shù)據(jù)類型的相關(guān)資料,幫助大家更好的理解和學習c++,感興趣的朋友可以了解下

1.C++數(shù)據(jù)類型簡介

C++是一種強類型語言,任何變量或函數(shù)必須遵循“先申明后使用”的原則。定義數(shù)據(jù)類型有兩個方面的作用:一是決定該類型的數(shù)據(jù)在內(nèi)存中如何存儲,二是決定可對該類型的數(shù)據(jù)進行哪些合法的運算。

C++的數(shù)據(jù)類型分為基本數(shù)據(jù)類型和非基本數(shù)據(jù)類型。其中非基本數(shù)據(jù)類型稱為復合數(shù)據(jù)類型或構(gòu)造數(shù)據(jù)類型。為了能夠體現(xiàn)C++語言和傳統(tǒng)C語言在非基本數(shù)據(jù)類型上的區(qū)別,在這里把能夠體現(xiàn)面向?qū)ο筇匦缘姆腔緮?shù)據(jù)類型成為構(gòu)造函數(shù)類型,而將其他非基本數(shù)據(jù)類型稱為復合數(shù)據(jù)類型。C++的數(shù)據(jù)類型數(shù)據(jù)如下圖所示:

基本數(shù)據(jù)類型是C++內(nèi)部預定義的,又叫內(nèi)置(built-in)數(shù)據(jù)類型。非基本數(shù)據(jù)類型則是用戶根據(jù)需要按照C++語法規(guī)則創(chuàng)建的數(shù)據(jù)類型。在這里,構(gòu)造數(shù)據(jù)類型和復合數(shù)據(jù)類型的區(qū)別在于:構(gòu)造數(shù)據(jù)類型的實例叫做對象,它是屬性和方法的集合。復合數(shù)據(jù)類型的實例叫變量,變量本身并無成員函數(shù)。構(gòu)造數(shù)據(jù)類型的一個顯著特征是在生成該數(shù)據(jù)類型的一個實例時,會自動調(diào)用該類型定義的構(gòu)造函數(shù)。也就是說,構(gòu)造數(shù)據(jù)類型實例的初始化工作是由構(gòu)造函數(shù)完成的。

**注意:**用基本數(shù)據(jù)類型定義變量時,類型出現(xiàn)在前面,變量直接跟在類型之后。但是用復合數(shù)據(jù)類型定義變量時,變量卻不一定完全位于類型之后。例如,定義一個數(shù)組int a[8],標識符a的數(shù)據(jù)類型是int[8],但是它出現(xiàn)在數(shù)據(jù)類型的中間部位。另外,定義或申明變量時,類型外一定不能加括號,例如用這種方式定義一個指針是不對的:(int*)p;,它的真實含義是將p轉(zhuǎn)換為int*類型,是強制類型轉(zhuǎn)換的語法形式。

2.寬字符型與單字符型

傳統(tǒng)的字符型char是單字節(jié)字符型,存儲的是該字符的ASCII碼,占用一個字節(jié)。也可以把char理解成單字節(jié)整型,取值范圍是-128~127。單字節(jié)無符號整數(shù)可以用unsigned char表示,取值范圍是0-255。

VC++中,如果在一個字符串中包含漢字,每個漢字占用2個字節(jié),每個字節(jié)的最高位都是1,寬字符占用多少字節(jié)與編譯器的具體實現(xiàn)有關(guān),以保證能夠存儲Unicode字符。VC++將wchar_t實現(xiàn)為2個字節(jié),2個字節(jié)很顯然不能表示所有的Unicode字符,但是通過當前系統(tǒng)的語言環(huán)境進行編碼轉(zhuǎn)換,兩個字節(jié)最大能夠表示65536個字符,足以表示某個國家的文字。

單字節(jié)字符是無法容納一個漢字字符的,如定義char c='好';將得到一條編譯警告信息,并且只有低字節(jié)編碼會存放在字符變量c中。

C++語言同時支持寬字符類型(wchar_t),用于表示Unicode字符。為了支持Unicode字符的處理,C++在庫函數(shù)中定義了相應(yīng)的Unicode字符的處理函數(shù),并將這些函數(shù)的申明放在了頭文件<cstring>中。

Visual C++中whar_t和char是兩種不同的數(shù)據(jù)類型,它們的存儲結(jié)構(gòu)和使用方法都不一樣。見如下例子。

#include <iostream>
using namespace std;

int main(int argc,char* argv[])
{
	char* p;
	wchar_t s[]=L"ABC";
	char name[]="張三";
	wchar_t wname[]=L"張三";

	cout<<sizeof(wchar_t)<<" "; //輸出2
	cout<<sizeof(s)<<endl;   //輸出8

	p=(char*)s;
	for(int i=0;i<sizeof(s);++i)
		cout<<(int)p[i]<<" ";
	cout<<endl;

	cout<<s<<" ";
	wcout<<s<<endl;

	for(int i=0;i<sizeof(name);++i)
		cout<<(int)name[i]<<" ";
	cout<<endl;
	p=(char*)wname;
	for(int i=0;i<sizeof(wname);++i)
		cout<<(int)p[i]<<" ";
	cout<<endl;

	cout<<name<<endl;
	//setlocale(LC_ALL, "chs"); //加上此句下面的wname才會輸出
	wcout<<wname<<endl;
}

程序輸出結(jié)果:

2 8
65 0 66 0 67 0 0 0
0048FC0C ABC
-43 -59 -56 -3 0
32 95 9 78 0 0
張三

閱讀以上程序,得出如下結(jié)論:

(1)wchar_t和char是不同的數(shù)據(jù)類型,數(shù)據(jù)寬度也不一樣,sizeof(char)==1,wchar_t的數(shù)據(jù)寬度與編譯器的實現(xiàn)有關(guān),再根據(jù)當前系統(tǒng)語言環(huán)境進行編碼轉(zhuǎn)換,足以保證存儲Unicode字符,在Visual C++中 wchar_t占用兩個字節(jié)。

(2)定義一個wchar_t類型的字符串時,要以L開頭,否則出現(xiàn)編譯錯誤。定義一個wchar_t類型的字符常量,也需要以L開頭,例如wchar_t wc=L'A',如果去掉L,編譯器會自動執(zhí)行由char到wchar_t的轉(zhuǎn)換。

(3)對于西文字符(如'A'、‘B'、'C'等)來說,在wchar_t類型的變量中,高字節(jié)存放的是0x00,低字節(jié)存放的是西文字符的ASCII碼值。

(4)char類型的字符串以單字節(jié)'\0'結(jié)束,wchar_t類型的字符串以雙字節(jié)'\0\0'結(jié)束。

(5)Windows7中文簡體環(huán)境中一個漢字占用兩個字節(jié),采用的是GBK 編碼,所以char類型的字符串中一個漢字占用兩個字節(jié)表示,這兩個字節(jié)的最高位都是1,只有這樣,才能將它們與西文字符區(qū)別開來,所以將它們的ASCII碼輸出時得到兩個負數(shù)。在wchar_t類型的字符串中,每個漢字都用雙字節(jié)表示,采用的是UTF-16編碼方式,因此相同的中文字符,存儲的碼值是不同的。UTF-16編碼與ASCII編碼不兼容,所以上面的代碼中用cout輸出L"ABC"無法正常輸出。還有就是UTF-16編碼將常用的字符采用兩個字節(jié)進行存儲,不常用的漢字采用四個字節(jié)存儲,因此用wchar_t存儲UTF-16編碼中四個字節(jié)的漢字會產(chǎn)生數(shù)據(jù)丟失,無法正確存儲。

(6)在上面的程序中,語句cout<<name<<endl;的輸出結(jié)果是"張三",而語句wcout< <wname< <endl;卻無法正??吹捷敵?。如果字符串wname中全是西文字符,則仍然可以看到輸出,這是在控制臺程序中的一個現(xiàn)象,與控制臺的缺省語言環(huán)境的設(shè)置有關(guān),即設(shè)置采用什么編碼方式輸出。通過setlocale來設(shè)置語言環(huán)境后,進行編碼轉(zhuǎn)換,見程序中的代碼。

以上就是淺析C++ 數(shù)據(jù)類型的詳細內(nèi)容,更多關(guān)于C++ 數(shù)據(jù)類型的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • VS2010 C++ 配置優(yōu)化方案

    VS2010 C++ 配置優(yōu)化方案

    使用VS2010的時候,發(fā)現(xiàn)了不少問題,而本文則是介紹使用中需要的問題,已經(jīng)解決方案。
    2014-10-10
  • C++中類的默認成員函數(shù)詳解

    C++中類的默認成員函數(shù)詳解

    大家好,本篇文章主要講的是C++中類的默認成員函數(shù)詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • linux下C/C++學生信息管理系統(tǒng)

    linux下C/C++學生信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了linux下c/c++學生信息管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • OpenCV?直方圖均衡化的實現(xiàn)原理解析

    OpenCV?直方圖均衡化的實現(xiàn)原理解析

    直方圖均衡化是通過拉伸像素強度分布范圍來增強圖像對比度的一種方法,今天通過本文給大家介紹OpenCV?直方圖均衡化的實現(xiàn)原理解析,感興趣的朋友跟隨小編一起看看吧
    2022-01-01
  • C++ 中CloseHandle 函數(shù)--關(guān)閉一個句柄

    C++ 中CloseHandle 函數(shù)--關(guān)閉一個句柄

    這篇文章主要介紹了C++ 中CloseHandle 函數(shù)--關(guān)閉一個句柄的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Matlab實現(xiàn)三維投影繪制的示例代碼

    Matlab實現(xiàn)三維投影繪制的示例代碼

    這篇文章系小編為大家?guī)砹艘粋€三維投影繪制函數(shù)(三視圖繪制),函數(shù)支持三維曲線、曲面、三維多邊形、參數(shù)方程曲線、參數(shù)方程曲面的投影繪制,需要的可以參考一下
    2022-08-08
  • C++11 強類型枚舉相關(guān)總結(jié)

    C++11 強類型枚舉相關(guān)總結(jié)

    這篇文章主要介紹了C++11 強類型枚舉的相關(guān)資料,幫助大家更好的理解和學習使用c++11,感興趣的朋友可以了解下
    2021-02-02
  • C++實現(xiàn)團購訂單管理系統(tǒng)

    C++實現(xiàn)團購訂單管理系統(tǒng)

    這篇文章主要為大家詳細介紹了如何利用C++實現(xiàn)團購訂單管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-12-12
  • C++實現(xiàn)動態(tài)煙花代碼

    C++實現(xiàn)動態(tài)煙花代碼

    這篇文章主要介紹了利用C++實現(xiàn)的放煙花程序,用到了EGE圖形庫,文中的示例代碼講解詳細,對我們學習C++有一定幫助,需要的可以參考一下
    2023-01-01
  • 詳解C/C++如何獲取路徑下所有文件及其子目錄的文件名

    詳解C/C++如何獲取路徑下所有文件及其子目錄的文件名

    這篇文章主要為大家詳細介紹了在C/C++中如何獲取路徑下所有文件及其子目錄的文件名,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-03-03

最新評論

老河口市| 上虞市| 邛崃市| 宁远县| 晋中市| 张家港市| 楚雄市| 香河县| 新昌县| 定安县| 桂林市| 墨江| 清徐县| 财经| 乌拉特前旗| 什邡市| 沁源县| 尉氏县| 宁海县| 肇州县| 潮州市| 盘锦市| 安乡县| 锡林浩特市| 乐亭县| 广安市| 四子王旗| 萨嘎县| 沂水县| 巩义市| 织金县| 通州区| 贡觉县| 新巴尔虎右旗| 嵩明县| 汉中市| 霍山县| 攀枝花市| 古浪县| 沾化县| 东乌珠穆沁旗|