《windows程序设计》笔记

1.要定义包含一个宽字符的变量,可使用下面的语句: 

wchar_t c = 'A'             

变量c是一个双字节值0x0041,是Unicode表示的字母A。(然而,因为Intel微处理器从最小的字节开始储存多字节数值,该字节实际上是以0x41、0x00的顺序保存在内存中。)


指向宽字符的指针: wchar_t * pw = L"Hello!"          

再次调用strlen : iLength = strlen (pw)             

现在麻烦来了。首先,C编译器会显示一条警告消息,可能是这样的内容: 'function' : incompatible types - from 'unsigned short *' to 'const char *'  这条消息的意思是:声明strlen函数时,该函数应接收char类型的指标,但它现在却接收了一个unsigned short类型的指标。您仍然可编译并执行该程序,但您会发现iLength等于1。为什么?  

字符串「Hello!」中的6个字符占用16位:  0x0048 0x0065 0x006C 0x006C 0x006F 0x0021  

Intel处理器在内存中将其存为:  48 00 65 00 6C 00 6C 00 6F 00 21 00

假定strlen函数正试图得到一个字符串的长度,并把第1个字节作为字符开始计数,但接着假定如果下一个字节是0,则表示字符串结束。


2.内存存储

图一



图二

例一

		std::cout<<sizeof(short)<<std::endl;

		unsigned short us = 0xE5F6;
		unsigned char *c = (unsigned char*)&us;

		for(int i = 0; i < sizeof(short); ++i, ++c)
			printf("0x%p : 0x%02x
", c, *c);
结果



例二

		std::cout<<sizeof(int)<<std::endl;

		unsigned int ui = 0xA1B2C3D4;
		unsigned char *c = (unsigned char*)&ui;
		for(int i = 0; i < sizeof(int); ++i, ++c)
			printf("0x%p : 0x%02x
", c, *c);
结果



例三

		unsigned int ui[2];
		ui[0] = 0xA1B2C3D4;
		ui[1] = 0xE5F60102;
		unsigned char *c = (unsigned char*)&ui;
		for(int i = 0; i < 8; ++i, ++c)
			printf("0x%p : 0x%02x
", c, *c);
结果



结论:

存储特点:位置从上到下、地址从低到高口诀:天上人间、剑法

原文地址:https://www.cnblogs.com/chaikefusibushiji/p/7475629.html