• 地址的强制转换


    小涛有一次给我看了一篇博客:http://c.biancheng.net/cpp/html/476.html.

    int main()
    {
       int a[4]={1,2,3,4};
       int *ptr1=(int *)(&a+1);
       int *ptr2=(int *)((int)a+1);
       printf("%x,%x",ptr1[-1],*ptr2);
       return 0;
    }

    那个强制转换给我搞懵了。a不是本来就是一个int形的4字节地址吗?

    后来看了下面的注解才明白。a确实是数组的首地址,强制转换后是a的第一个字节的地址。

    即a只是个表示地址的标识符,a+1,这个1的大小与a数组的类型有关,表示加上一个元素大小的偏移量。

    以前看书真是太不仔细了。

    由此也得出判断操作系统大小端的方式,直接上代码:

    int main(int argc,char** argv)
    {
        short a = 0x1122;
    
        if (*(char*)&a == 0x22)
        {
            printf("small
    ");
        }
        else
        {
            printf("big
    ");
        }
        
    
    
        return 0;
    }
  • 相关阅读:
    第一次博客作业
    自我介绍
    第一次个人编程作业
    第一次博客作业
    第一次个人编程作业
    第一次博客作业
    Alpha冲刺
    Alpha冲刺 (2/10)
    Alpha 冲刺 (1/10)
    福大软工 · 第七次作业
  • 原文地址:https://www.cnblogs.com/wyc199288/p/5566993.html
Copyright © 2020-2023  润新知