zoukankan      html  css  js  c++  java
  • 《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);
    结果



    结论:

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

  • 相关阅读:
    Anaconda+Vscode+opencv3环境打造
    关于AXI4-Stream Infrastucture IP的学习
    Xilinx的License问题
    IOBUF的使用
    Vscode的学习
    关于ZYNQ 7 processing system IP的设置导出与导入
    使用zynq verification IP进行系统验证
    使用AXI Verifcation IP进行系统验证
    MIG IP学习笔记
    Git的GUI工具sourcetree的使用
  • 原文地址:https://www.cnblogs.com/chaikefusibushiji/p/7475629.html
Copyright © 2011-2022 走看看