天天看点

Windows程序设计 读书笔记(2)

第二章

2.2.1 char数据类型

声明和初始化一个包含单一字符变量:

char c = ‘A’

变量c需要一个字节的存储空间而且会用十六进制0x41来初始化。

定义一个指向字符串的指针:

char *p;

该指针需要用4个字节的空间。初始化为p=“Hello!”之后仍然需要4个字节的存储空间。字符串存储在静态内存中并使用7个字节的存储孔家。(其中包括6个字节存储字符串和一个字节存储表是字符串结束的\0);

2.2.2 宽字符

wchar_t c=’A’;其中c是16位宽的。但是需要注意的是Intel微处理器存储多字节时,总是最低字节优先,所以存储的顺序是:0x41,0x00。

宽字符指针

wchar_t *p=L”Hello!”;

存储p的内存需要14个字节——每个字符需要两个字节,再加上最后的\0需要两个字节。

这里有个问题需要注意一下:

如果strlen(p)得到的结果会是1。本来结果应该是等于6的,但是为什么结果会是等于1呢?事实上是这样的:字符串“Hello!”的6个字符包含的16位值如下:

0x0048,0x0065,0x006C,0x006C,0x006F,0x0021,这些值被Intel处理器以下面这种方式存储在内存中:48 00 65 00 6C 00 6F 00 21 00

所以计算第一个字节为字符,但是认为第二个是一个表明字符串结尾的\0。

继续阅读