• 《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);
    结果



    结论:

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

  • 相关阅读:
    C++11多线程
    C++单例模式
    从五大结构体,带你掌握鸿蒙轻内核动态内存Dynamic Memory
    云小课 | 云硬盘不用了如何处理?
    Kafka 源码解析:Server 端的运行过程
    带你掌握4种Python 排序算法
    面试官问我:如何减少客户对交付成果的质疑
    如何基于MindSpore实现万亿级参数模型算法?
    Go 接口类型
    Go 结构体
  • 原文地址:https://www.cnblogs.com/chaikefusibushiji/p/6775785.html
Copyright © 2020-2023  润新知