开发手册 欢迎您!
软件开发者资料库

C++ 数据类型

C++中, 每个变量在使用之前必须定义其数据类型。本文主要介绍C++中数据类型(布尔型(bool)、、整型(int)、浮点型(float)、双浮点型(double)、字符型(char)、无值型 (void)、宽字符型(wchar_t))。

1、布尔型(bool)

bool是占一个字节的逻辑值,定义出来的变量只有truefalse两个,分别表示真和假,对应10两个值。所以比较好理解的是,在C语言中我们常常定义一个int类型的troop逻辑变量,也只有10两个值表示真和假。在C++中专门有这样一个数据类型应该是方便我们使用。

例如,

#include using namespace std;bool compar(int a,int b){    if (a>=b)        return true;    else if (a>a>>b;    cout<

2、整数类型(int)

int是一种数据类型,在编程语言(C、C++、C#、Java等)中,是用于定义整数类型变量的标识符。C 语言提供了很多整数类型(整型),这些整型的区别在于它们的取值范围的大小,以及是否可以为负。int是整型之一,一般被称为整型。int代表有符号整数,也就是说,用int声明的变量可以是正数,可以是负数,也可以是零,但是只能是整数。标准规定int的最小取值范围是 -32767 到 32767。int的取值范围因机器而异,但是一定要大于或者等于 -32767 到 32767。标准整数类型的存储大小和值范围,如下表,

类型

范围

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

为了得到某个类型或某个变量在特定平台上的准确大小,可以使用 sizeof 运算符。表达式 sizeof(type) 得到对象或类型的存储字节大小。

#include using namespace std;int main(){    int a,b=2;    cin>>a>>b;    cout<

3、浮点类型

每当需要带小数的数字(例如,9.993.14515)时,都应使用浮点类型。标准浮点类型的存储大小、值范围和精度,如下表,

类型

范围

float

4 个字节

精度型占4个字节(32位)内存空间,+/- 3.4e +/- 38 (~7 个数字)

double

8 个字节

双精度型占8 个字节(64位)内存空间,+/- 1.7e +/- 308 (~15 个数字)

long double

16 个字节

长双精度型 16 个字节(128位)内存空间,可提供18-19位有效数字。

例如,

#include using namespace std;int main(){    float distance = 1.496E8;     double mass = 1.989E30;     cout << "distance = " << distance << endl;    cout << "mass = " << mass ;    return 0;}

4、字符类型

char类型的值占用所有数据类型的最小内存量。通常只需要一个字节。char不仅是一种整数,也是一种特殊的类型:字符(character)。可以通过字符常量为char类型的变量指定初始值。

1)字符常量可以只是单引号之间的字符。常用单引号表示字符的字面量,如,'a','1'。单引号''也是一个字符,例如,

#include using namespace std;int main(){    char c;    char d;    c = 1;    d = '1';//将字符赋值给一个char变量    if(c == d){        cout << "相等" << endl;    }else{        cout << "不相等" << endl;    }    cout << "c=" << c << endl;    cout << "d=" << d << endl;    return 0;}

注意:char整数类型和字符类型不相等,如1'1',一个是数字,一个是字符。

2)字符的输入输出

#include using namespace std;int main(){    char c;    char d;    cin>>c>>d;//以下面两种形式输出    cout << "c=" << c << endl;//以整数值是多少    cout << "d=" << d << endl;    return 0;}

3)字符计算

C++中字符是一种整数,可以做运算。例如,

#include using namespace std;int main(){    char c = 'A';    c++;    cout << "c=" << c << endl;    return 0;}

5、void 类型和指针型(*)

void类型其实是一种用于语法性的类型,而不是数据类型,主要用于作为函数的参数或返回值,或者定义void指针,表示一种未知类型。无值型字节长度为0, 主要有两个用途:

1)明确地表示一个函数不返回任何值;

2)可以产生一个同一类型指针(可根据需要动态分配给其内存)。 类型为 void * 的指针代表对象的地址,而不是类型。

例如,

#include int main(){    void *ptr = NULL; //void 指针    void *buffer; /*buffer被定义为无值型指针*/    int *p  = NULL;// 整型指针    char *cp = NULL;//字符指针    float *fp = NULL;//浮点指针    return 0;}

6、宽字符型(wchar_t)

宽字符wchar_t的长度16位,可以用来显示中文等除英文外的其他文字。

例如,

#include#includeusing namespace std;int main(){ setlocale(LC_ALL, "chs");//指定字符区域为中文 wchar_t st[] = L"中文的"; char stc[] = "中文的"; wcout<

1)转换函数

头文件 #include

//宽字符转换为窄字符errno_t wcstombs_s(   size_t *pReturnValue, //被修改的位数,作为返回的   char *mbstr,          //转换后字符串(窄)的空间指针   size_t sizeInBytes,   //我暂时理解为,允许操作窄字符缓冲区的字符的个数,                         //要比count大1,不能大过缓冲区最大长度   const wchar_t *wcstr,  //指向要转换的宽字符字符串   size_t count ) ;         //要转换的宽字符的个数; //窄字符转换为宽字符errno_t mbstowcs_s(   size_t *pReturnValue, //被修改的位数,作为返回的    wchar_t *wcstr,       //转换后宽字符串的缓冲区指针   size_t sizeInWords,   // 允许操作缓冲区中宽字符的个数   const char *mbstr,    //指向要转换的窄字符的字符串   size_t count          //要转换的窄字符的个数);

2)将宽字节的字符串转换为窄字符的字符串

#include #include std::string ws2s(const std::wstring& ws){ std::string curLocale = setlocale(LC_ALL, NULL);        // curLocale = "C"; setlocale(LC_ALL, "chs");                                             //中文地区 const wchar_t* _Source = ws.c_str(); size_t _Dsize =  ws.size() + 1;                                    //比要转换的宽字符个数大1 char *_Dest = new char[_Dsize]; memset(_Dest, 0, _Dsize);                                          //初始化缓冲区 size_t   i; wcstombs_s(&i, _Dest, _Dsize, _Source, ws.size()); std::cout << "i:" << i << std::endl;                           std::string result = _Dest; delete[]_Dest; setlocale(LC_ALL, curLocale.c_str());                               //设置回原来的locale return result;}

3)将窄字节的字符串转换为宽字符的字符串

#include #include std::wstring s2ws(const std::string& s){  std::string curlLocale = setlocale(LC_ALL,NULL);  setlocale(LC_ALL, "chs");  const char* _Source = s.c_str();  size_t _Dsize = s.size() + 1;  wchar_t* _Dest = new wchar_t[_Dsize];  size_t i;  mbstowcs_s(&i, _Dest, _Dsize, _Source, s.size());  std::wstring result = _Dest;  delete[] _Dest;  setlocale(LC_ALL, curlLocale.c_str());  return result;}