字符类数据类型汇总

字符:

以下数据类型用于定义字符变量:

char      字符,一般占用1个字节,取值是 0~127,和整型是等价的。

wchar_t      宽字符,占用2个或4个字节,根据系统的差别而不同。

字符变量可用字符常量来赋值,也可以用整数来赋值。

字符常量:用单引号括起来的一个字符,或转义字符,例如:'a'   '\n'    '\u4E90'。

如果一个字符常量前用L来修饰,表示一个宽字符,它只能用 wchar_t 类型的变量来存储 。例如:L'A'。


字符数组:

字符数组就是以字符为元素的数组,可以这样定义和初始化:

char greeting[5] = {'H','e','l','l','o'};

元素数量可以省略:

char greeting[] = {'H','e','l','l','o'};


字符串:

如果一个字符数组以'\0'结尾,就专门称作”字符串”。以下写法都等价:

char greeting[6] = {'H','e','l','l','o','\0'};

char greeting[] = {'H','e','l','l','o','\0'};

char greeting[] = "Hello";

string_representation.jpg



string:

string 类是一个C++标准库中的类,支持 + = .size() 等操作。用法:


include <string>


string str1 = "hello";

string str2 = "world";

string str3;

str3 = str1+str2;

str3.size();


=====================================================

以上,是C++基本的数据类型。但是对于C++的变量来说,有一个永恒的迷惑:一个变量究竟是指它的地址,还是那个地址存储的内容?

每当定义了一个变量:

char Var = 'a';

那么系统会在某个地址存上一个信息。这个变量是地址和内容的统一体,但对于上面这样定义的变量名 Var,”显然地”代表内容,要获知其地址,就用:  &Var。

如果要定义一个变量让它”显然地”代表地址呢?那就这样:

char *pVar;

注意,我们一般难以人工分配一个内存地址,因此也难以对其初始化,但为了防止出现错误,一般要用 null 来初始化:char* pVar = null;

这里非常具有迷惑性:对变量取地址用 &,而定义地址变量却用 *,细想也对:对”显然”为内容的变量取地址用 &,定义”显然”为地址的变量【有一个专门的名词叫”指针”】用 *。

那么:可以如下赋值:

pVar = &Var;   // 这里传递的是地址。

对一个地址,取其中的内容,用*,*pVar 就是 'a'。


小结:

1)内容定义:   char Var       取地址:   &Var

2)地址【指针】定义:   char* pVar    贼值:     pVar = &Var      取内容:   *pVar


写到这里似乎有些天晴了,然而还有一个概念叫”引用”:

char& Var2 = Var;

这个意思是说:声明了一个变量 Var2,并用 Var 的内容显式对其初始化,但是:两者根本就是一个人好吗?引用的一个用处就是作为函数的参数,在执行函数的同时改变其内容。

对比:

char Var3 = Var;

这是新开辟了一块内存,并用 Var 的内容对其初始化。


另:数组名实际上是一个地址,其首元素的地址。所以,还可以这样定义一个数组:

char* greeting =  new char[6];

char* greeting =  new char[6]{'H','e'};  // 只初始化前两个元素。

char* greeting = "Hello";


=====================================================

CString:


有关字符类型有很多宏定义,(有一些在 winnt.h 里),是为了 ANSI 和 UNICODE 的兼容。

例如:

CHAR == char

WCHAR == wchar_t

而 TCHAR 是一种条件类型,如果定义了 UNICODE,就 == WCHAR,否则 == CHAR。


LPSTR == CHAR*

LPCSTR == const CHAR*

LPTSTR == TCHAR*

LPCTSTR == const TCHAR*


TCHAR* greeting  = _T("Hello");

LPTSTR greeting = _T("Hello");





char* => CString

char* p1="Hello";

CString c1 = p1;

CString c2(p1);


























  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值