zoukankan      html  css  js  c++  java
  • u8*强制转换成u32*

    一个u8类型的数组,指针p指向该数组的第一个元素,p的类型是u8*,指针q也指向该数组的第一个元素,q的类型是u32*,问*p和*q的值是多少?

    typedef unsigned long  u32;
    typedef unsigned short u16;
    typedef unsigned char  u8;
    
    int main(void)
    {
        u8 i;
        u8 tab[4] = {0x12, 0x34, 0x56, 0x78};
        u8 *p = tab;
        u32 *q = (u32*)p; 
    
        for (i=0; i<4; i++)
        {
            printf("%#x  ", tab+i);
            printf("%#x
    ", tab[i]);
        }
    
        printf("
    ");
    
        for (i=0; i<4; i++)
        {
            printf("%#x  ", p);
            printf("%#x
    ", *p);
            p++;
        }
        
        printf("
    ");
        printf("%#x
    ", *q);
        
        return 0;
    }
    
    /*************************************************
    在VC++6.0中的输出结果是:
    0x18ff40  0x12
    0x18ff41  0x34
    0x18ff42  0x56
    0x18ff43  0x78
    
    0x18ff40  0x12
    0x18ff41  0x34
    0x18ff42  0x56
    0x18ff43  0x78
    
    0x78563412
    Press any key to continue
    *************************************************/

     

    由于p是指向u8类型的指针,所以*p数值就是数组tab对应元素值。

    由于q是指向u32类型的指针,所以*q数值就是u32类型的值。不同体系结构的CPU,数据在内存中存放的排列顺序是不一样的,经测试知STM32F05x是小端模式,所以*q=0x78563412

  • 相关阅读:
    js调试技巧
    Java编程技巧——构建器
    java设计模式:工厂方法模式(Factory Method)
    23种设计模式导航
    java设计模式:单例模式(Singleton Pattern)
    迭代器与生成器
    装饰器
    文件操作的说明与使用
    函数命名、调用小技巧
    各类型数据的操作方法
  • 原文地址:https://www.cnblogs.com/wj86843248/p/7409907.html
Copyright © 2011-2022 走看看